|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.02.2012, 09:44 | #1 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
шаблонные методы шаблона. Специализация.
Вопрос: каким образом можно вынести реализацию методов класса за его пределы?
Изначально вопрос формулировался так: Каким образом можно произвести специализацию одного из методов шаблона класса так, что бы эта специализация зависела только от одного (или нескольких) параметров шаблона, но не от всех? Другими словами, как можно частично специализировать отдельно взятый метод шаблона так, что бы при этом не пришлось частично специализировать весь класс целиком. Однако, ответ на этот вопрос был найден. Ниже представленный код этот момент иллюстрирует: Код:
Но я не люблю, когда у меня декларативная часть класса захламляется реализациями методов. Вопрос: каким образом можно вынести реализацию методов класса за его пределы? Вообще, всегда думал, что правильно - сначала пишется шапка класса-владельца, потом пишется шапка шаблонного метода. Использовал такой способ: Код:
Вообще, я уже как мартышка методом научного тыка по всякому перепробовал. Если специализировать внутри класса - все нормально. Снаружи ну никак не получается... |
07.02.2012, 21:28 | #2 | |||
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2_Bers
для начала нужно сказать, что твой код неверный. по стандарту (с++2003) нельзя специализировать шаблонный член внутри шаблонного класса. в студии своя религия, поэтому у тебя это компилится. Цитата:
Код:
Цитата:
Цитата:
но в плюсах всегда можно извратиться, и сэмулировать то, что тебе нужно Код:
читать александреску, вандервуда
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
|||
07.02.2012, 22:08 | #3 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
можно даже пойти дальше, написав
Код:
извратиться можно сильно, но не всегда нужно. уверен на 99%, твою задачу можно решить проще. только не говори, что задача - частично специализировать шаблонный метод (как ты упорно настаивал в прошлой теме). это НЕ задача, а средство реализации. напиши, что хочешь получить в итоге, я может смогу показать, как это бы сделал я. если же "задача" - использовать как можно больше шаблонов - флаг в руки.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 07.02.2012 в 22:11. |
08.02.2012, 00:47 | #4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
В вашем коде я нефига не понял вот этот момент:
Код:
Коллективный разум подсказал альтернативное решение. И хотя сие суть "обходной путь", но оно полностью удовлетворяет условию. То бишь, сие суть "имитация" частичной специализации отдельного метода шаблона класса. Если интересно: Код:
Последний раз редактировалось _Bers; 08.02.2012 в 00:52. |
08.02.2012, 00:52 | #5 | ||
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2_Bers
Цитата:
Цитата:
пс. и да, мой код все же ближе к твоему "идеалу". ты просто перенес шаблонные параметры из шаблонного метода в шаблонный класс. я их оставил. сравни твой вызов: Код:
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 08.02.2012 в 00:58. |
||
08.02.2012, 01:38 | #6 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Он просто толкает foo. foo "как бы специализирована" для каждого конкретного случая. Но клиенты об этом ничего не знают, и им это даже и не интересно. Вся служебная информация о фактических типах конструируется один раз при создании класса объекта. И в последствии больше нигде не фигурирует. Клиенты не знают, что они имеют дело с продуктами шаблона. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Специализация шаблона | Bubaleh | Общие вопросы C/C++ | 6 | 09.09.2011 12:01 |
Шаблоны класса и специализация | РагнаР | Общие вопросы C/C++ | 9 | 13.03.2011 19:29 |
шаблонные строковые функции | MrKarapuz | Общие вопросы C/C++ | 7 | 09.11.2009 15:07 |
C++ Специализация шаблона | opensuse2008 | Помощь студентам | 7 | 07.06.2009 18:00 |