typedef для частичной специализации шаблона
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 20.04.10 17:08
Оценка:
Есть класс:
template<class T, bool VAL>
class A
{
};


Возможно сделать для VAL == false и VAL == true свои typedef'ы? Хотелось бы, чтобы это выглядело примерно так (разумеется, что написанное не компилируется):
typedef A<T, true> At<T>;
typedef A<T, false> Af<T>;

At<int> a1;
Af<float> a2;
Re: typedef для частичной специализации шаблона
От: kpcb Россия  
Дата: 20.04.10 17:29
Оценка: 2 (1)
Можно сделать так:

template<typename T>
struct At
{
    typedef typename A<T, true> Type;
};

template<typename T>
struct Af
{
    typedef typename A<T, false> Type;
};

Af<int>::Type foo;
At<float>::Type bar;
Re[2]: typedef для частичной специализации шаблона
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 20.04.10 17:48
Оценка:
Здравствуйте, kpcb, Вы писали:

K>Можно сделать так:


Не совсем то, что я хотел, но лучше, чем без ничего: A<int, true> и A<float, false>
Эту конструкцию писать не так уж и трудно, но смысл интуитивно непонятен. Спасибо.
Re: typedef для частичной специализации шаблона
От: stapter  
Дата: 20.04.10 17:55
Оценка: 2 (1)
Здравствуйте, Nuzhny.
kpcb предложил хороший вариант, и я бы им воспользовался. Могу еще предложить вариант с открытым наследованием. Правда в данном случае мы получим не alias, а новый шаблонный тип, который будет также являться нужной Вам специализацией.


template<typename T>
class At: public A<T, true>
{
};

template<typename T>
class Af: public A<T, false>
{
};

At<int> a1;
Af<float> a2;
Re: typedef для частичной специализации шаблона
От: Masterkent  
Дата: 20.04.10 20:34
Оценка:
Интересно, есть ли уже какой-нибудь компилятор, который поддерживает template aliases? Вроде, особых сложностей в их реализации быть не должно.
Re[2]: typedef для частичной специализации шаблона
От: K13 http://akvis.com
Дата: 21.04.10 06:10
Оценка:
S>kpcb предложил хороший вариант, и я бы им воспользовался. Могу еще предложить вариант с открытым наследованием. Правда в данном случае мы получим не alias, а новый шаблонный тип, который будет также являться нужной Вам специализацией.

Вариант хороший — кроме необходимости явного дуюлирования конструкторов.
Разумеется, для traits это ни к чему, но шаблоны бывают всякие...
Re[2]: typedef для частичной специализации шаблона
От: sidorov18 США  
Дата: 21.04.10 11:29
Оценка:
Здравствуйте, kpcb, Вы писали:

K>Можно сделать так:


K>
K>template<typename T>
K>struct At
K>{
K>    typedef typename A<T, true> Type;
K>};

K>template<typename T>
K>struct Af
K>{
K>    typedef typename A<T, false> Type;
K>};

K>Af<int>::Type foo;
K>At<float>::Type bar;

K>


А с шаблонной ф-ей можно сделать что-то такое?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.