Есть такие два класса:
template<T>
class A;
template<T, V>
class B: public A<T>;
Например мне известен T и хочется typedef'ом ввести новый тип B1 у которого
бы был только один параметр. Как написать такой typedef (именно typedef, no macros!)?
//typedef class B<int, V> class B1<V>; //не работает, как написать ???
B1<char> b; // эквивалентно B<int, char> b;
Здравствуйте, kavaj, Вы писали:
Шаблонные typedef'ы йок, зато есть type traits
template<class V>
struct B1_traits
{
typedef B<int,V> type;
};
......
typedef typename B1_traits<char>::type B2;
B2 b2;
// или даже вот так
typename B1_traits<char>::type b2;
Здравствуйте, kavaj, Вы писали:
K>Есть такие два класса:
K>K>template<T>
K>class A;
K>template<T, V>
K>class B: public A<T>;
K>
K>Например мне известен T и хочется typedef'ом ввести новый тип B1 у которого
K>бы был только один параметр. Как написать такой typedef (именно typedef, no macros!)?
K>
K>//typedef class B<int, V> class B1<V>; //не работает, как написать ???
K>B1<char> b; // эквивалентно B<int, char> b;
K>
template< typename V>
class B1 : public B<int, V>;
template< typename V>
class B1 : public B<int, V>;
про trait-ы Кодта не успел прочитать
![](/Forum/Images/smile.gif)
это конечно другая тема, здорово.
Если я правильно понял задачу, то:
template <class T>
class type_traits {
}
template <>
class type_traits<char> {
typedef int type;
}
template <class T, class V = type_traits<T>::type > class B : public A<T> {};
B<char> b; //будет работать как B<char, int>
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, kavaj, Вы писали:
К>Шаблонные typedef'ы йок, зато есть type traits
К>...
К>typedef typename B1_traits<char>::type B2;
К>...
К>
Позволю себе маленькую придирку по поводу лишнего typename:
"ComeauTest.c", line 11: error: typename may only be used within a template
typedef typename B1_traits<char>::type B2;
^
1 error detected in the compilation of "ComeauTest.c".
Здравствуйте, Bell, Вы писали:
B>Позволю себе маленькую придирку по поводу лишнего typename:
Копипаст рулит
![](/Forum/Images/frown.gif)
Конечно же, здесь typename лишний
Всем спасибо, сделал как у Кодт.
Но выглядит как изврат.
Интересно, собираются ли поддерживать шаблонные typedef ?