| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Использование шаблонов |
| Автор: Lazin 11.1.2008, 14:24 | ||||||||||
| В общем проблема следующая есть шаблонная функция
тип который подставляется в этот шаблон то-же не так прост...
для того что бы вызвать ф-ю нуно написать:
нельзя ли как-нибудь упростить запись ?
а потом использовать во так:
но это увы невозможно.... противоречит стандарту ;) как можно поступить в этой ситуации? |
| Автор: Alek86 11.1.2008, 14:45 | ||||
ничего умнее наследования не придумал
отследить, что от another_type нельзя наследоваться, можно. как - описано в книге "Шаблоны C++" (там немало кода, но он собран в библиотеку) если another_type любой, то умнее\
я не придумал |
| Автор: archimed7592 11.1.2008, 14:47 | ||
Самое универсальное решение такого:
Добавлено через 1 минуту и 16 секунд С наследованием проблема в том, что, как минимум нужно продублировать конструкторы... |
| Автор: Alek86 11.1.2008, 14:51 | ||
точно |
| Автор: Lazin 11.1.2008, 14:57 |
| так и думал, что придется еще один что-то подобное городить... не хочется, но придется. кстати boost::mpl кто-нибудь юзает? |
| Автор: Alek86 11.1.2008, 15:39 | ||
а вот так?
|
| Автор: Earnest 11.1.2008, 16:41 | ||
А я бы макрос нарисовала. Что-то вроде:
Прошу тапками не кидаться, про всякие их ужасы знаю... но все равно пользуюсь, когда очень хочется. |
| Автор: Lazin 11.1.2008, 16:51 |
| я то-же сначала макрос нарисовал, но с шаблоном получилось не хуже)) сделал примерно так только оприделил класс внутри ф-ии |
| Автор: Alek86 11.1.2008, 16:52 |
| а шапками можно? просто поинтересуюсь - а зачем использовать дефайны, когда можно обойтись без них? из-за лени? Добавлено через 2 минуты и 19 секунд а моим способом не надо ::type писать... |
| Автор: Lazin 11.1.2008, 17:29 |
но твой случай в моем случае не подходит, потому-что у меня этот шаблон раскрывается в один из POD типов, и потом передается в std::numeric_limits<T> . компилятор не смотрит на оператор приведения типа, и пытается инстанциировать шаблон типом Type |
| Автор: Alek86 11.1.2008, 17:40 |
| можно примерчик небольшой? вроде ж, компилятор обязан просматривать все приведения типа |
| Автор: Lazin 11.1.2008, 20:22 | ||
передается в качестве шаблонного параметра Т
|
| Автор: Alek86 11.1.2008, 21:10 | ||||
и что, если поменять код (соответственно):
и
это не компилируется? |
| Автор: Lazin 11.1.2008, 21:45 |
| нет, не компилируется, код type_at_t<pktime_types, n>::Type обычно преобразуется в один из простых типов, int char и тд. |
| Автор: Cycle 13.1.2008, 01:56 | ||
Вроде в новом стандарте С++0х такое уже должно компилится.
И вроде в последний gcc включено реализация черновика С++0х. У кого есть такой компилятор (и кто знает с каким ключем нужно компилить) проверте плз. P.S. Я понимаю, что автору топика может не к месту использовать gcc по Linux |
| Автор: archimed7592 13.1.2008, 07:02 |
Да, но, IIRC, нужно typedef typename заменить на using |
| Автор: UnrealMan 14.1.2008, 14:33 | ||||
Если N - шаблонный аргумент, то твой макрос работать не будет. |
| Автор: Lazin 14.1.2008, 15:37 |
Это еще почему? |
| Автор: Alek86 14.1.2008, 15:43 |
| в шаблоне могут быть запятые можно вызывать с помощью (N) а не N |
| Автор: archimed7592 14.1.2008, 20:49 |
typename |
| Автор: Earnest 14.1.2008, 21:00 |
Да, правильно. Я просто кратко написала. По ходу, в макросах скобки нужно ставить на всех параметрах. |
| Автор: Alek86 15.1.2008, 11:11 | ||||
| Earnest, не поможет вызов
будет невалиден, нужно
|
| Автор: Lazin 15.1.2008, 11:29 | ||
так должно работать
|
| Автор: Alek86 15.1.2008, 12:45 |
это в ответ на какой пост? если на мой, то я совсем не то имел в виду если не на мой - звыняюсь ) |