Как сделать typedef
От: kavaj  
Дата: 23.11.05 13:10
Оценка: :)
Есть такие два класса:

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;
Re: Как сделать typedef
От: Кодт Россия  
Дата: 23.11.05 13:14
Оценка: 12 (2) +2
Здравствуйте, 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;
Перекуём баги на фичи!
Re: Как сделать typedef
От: Ovl Россия  
Дата: 23.11.05 13:15
Оценка:
Здравствуйте, 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>;
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[2]: Как сделать typedef
От: Ovl Россия  
Дата: 23.11.05 13:17
Оценка:
template< typename V> 
class B1 : public B<int, V>;


про trait-ы Кодта не успел прочитать это конечно другая тема, здорово.
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re: Как сделать typedef
От: Vamp Россия  
Дата: 23.11.05 13:18
Оценка:
Если я правильно понял задачу, то:

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>
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Как сделать typedef
От: Bell Россия  
Дата: 23.11.05 13:51
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, 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".


Любите книгу — источник знаний (с) М.Горький
Re[3]: Как сделать typedef
От: Кодт Россия  
Дата: 23.11.05 13:53
Оценка:
Здравствуйте, Bell, Вы писали:

B>Позволю себе маленькую придирку по поводу лишнего typename:


Копипаст рулит Конечно же, здесь typename лишний
Перекуём баги на фичи!
Re: Как сделать typedef
От: kavaj  
Дата: 23.11.05 15:34
Оценка: :)
Всем спасибо, сделал как у Кодт.
Но выглядит как изврат.

Интересно, собираются ли поддерживать шаблонные typedef ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.