| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Две версии operator* с разными возвр. значениям |
| Автор: ANTON_AL 3.7.2007, 13:28 | ||
| Доброго дня! Есть класс. У него должна быть одна из двух версий operator* с одинаковыми параметрами, которые различаются только возвращаемыми значениями. Нужно сделать так, чтобы в зависимости от переданного шаблонного параметра была реализована та, или иная версия operator*. Код должен выглядить примерно так:
Т.е, ключевой момент в том, чтобы использовать ветвление по параметру шаблона, которое касается объявления, как по аналогии с #ifndef....#define....#endif |
| Автор: HappyLife 3.7.2007, 13:36 |
| Перегрузка возможна только с разными параметрами, а не с разными возвращаемыми значениями. |
| Автор: ANTON_AL 3.7.2007, 13:43 |
| Речь здесь идёт не о перегрузке, а о реализации одной из двух версий operator* в зависимости от переданного шаблонного параметра. |
| Автор: MAKCim 3.7.2007, 13:54 | ||
|
| Автор: Daevaorn 3.7.2007, 14:49 |
| ANTON_AL, специализация шаблонного класса тебе поможет. а вообще лучше меняй дизайн. |
| Автор: korbian 3.7.2007, 15:19 |
| MAKCim, что есть Behaviour? Вопрос снят, простите за невнимательность. |
| Автор: MAKCim 3.7.2007, 15:21 |
| korbian, откуда я знаю? спроси у ANTON_AL |
| Автор: korbian 3.7.2007, 15:22 |
| См. выше редакцию. |
| Автор: ANTON_AL 3.7.2007, 20:03 |
| MAKCim, Спасибо за пример. Хороший приём. Этот класс, для которого нужна одна из двух версий operator* представляет собой алгоритмическое число с фиксированной точкой, которое будет использоваться в разрабатываемой библиотеке алгоритмов. При умножении двух чисел, если мы хотим сохранить данные и избежать переполнения, нужно результат хранить в числе, разрядность которого в два раза больше, т.е. WORD*WORD = DWORD В одних алгоритмах требуется сохранять данные ( т.е. WORD*WORD = DWORD ), в других нет ( WORD*WORD = WORD ). А класс этого числа будет для всех алгоритмов один. Вот в этом и была проблема с реализацией одного из двух operator* для числа, в зависимости от его типа поведения ( Behavior: защищённое от переполнения/ не защищённое) Проблему решил, просто сделав switch в коде. Геморно, но пока работает. |