Как узнать тип шаблонного параметра?
От: jassix  
Дата: 14.08.11 08:28
Оценка:
У меня есть шаблонная функция.

Туда передаётся параметр шаблонный. Но одного его не хватает чтобы изменить поведени в зависимости от типа.
Нужно ещё как то узнать что за тип и в зависимости от этого выполнить тот или другой код. Есть что-то типа "typeof" и.т.п.
Или нужно передавать ещё булевый параметр в шаблон? Но он может быть не тот что типовый по ошибке. Как-то не очень красиво получается.
Может есть правильный выход?
Re: Как узнать тип шаблонного параметра?
От: Sni4ok  
Дата: 14.08.11 08:43
Оценка:
Здравствуйте, jassix, Вы писали:

J>У меня есть шаблонная функция.


J>Туда передаётся параметр шаблонный. Но одного его не хватает чтобы изменить поведени в зависимости от типа.

J>Нужно ещё как то узнать что за тип и в зависимости от этого выполнить тот или другой код. Есть что-то типа "typeof" и.т.п.

полная специализация, перегрузка функции, boost::enable_if (disable_if).
boost::enable_if в частности позволяет добиться подобия частичной специализации для фунций.
Re: Как узнать тип шаблонного параметра?
От: rg45 СССР  
Дата: 14.08.11 08:49
Оценка:
Здравствуйте, jassix, Вы писали:

J>У меня есть шаблонная функция.


J>Туда передаётся параметр шаблонный. Но одного его не хватает чтобы изменить поведени в зависимости от типа.

J>Нужно ещё как то узнать что за тип и в зависимости от этого выполнить тот или другой код. Есть что-то типа "typeof" и.т.п.
J>Или нужно передавать ещё булевый параметр в шаблон? Но он может быть не тот что типовый по ошибке. Как-то не очень красиво получается.
J>Может есть правильный выход?

Для решения этой задачи тебе нужно освоить такие темы, как перегрузка функций и специализация шаблонных функций. Для относительно простых случаев должно хватить. В более сложных случаях шаблоны функций приходится реалиовывать через вспомогательные шаблоны классов, для которых помимо полной возможна также частичная специализация.
--
Не можешь достичь желаемого — пожелай достигнутого.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.