C ++ typedef для частичных шаблонов - PullRequest
15 голосов
/ 08 июня 2010

Мне нужно сделать typedef, как это.

template< class A, class B, class C >
class X
{
};

template< class B, class C >
typedef X< std::vector<B>, B, C >  Y;

Я только что обнаружил, что он не поддерживается в C ++.Может кто-нибудь посоветовать мне, как добиться того же с помощью альтернативных средств?

Спасибо, Гокул.

Ответы [ 2 ]

18 голосов
/ 08 июня 2010

Если у вас есть компилятор C ++ 0x / C ++ 1x, это будет разрешено с немного другим синтаксисом (кажется, что компиляторы все еще не поддерживают эту функцию):

template <typename B, typename C>
using Y = X< std::vector<B>, B, C >;

Вы можете использовать другие методы, такие как определение закрытого типа в шаблонной структуре (как предлагает Питер) или злоупотребление наследованием (по возможности избегайте):

template <typename B, typename C>
class Y : public X< std::vector<B>, B, C > {};
15 голосов
/ 08 июня 2010

Поместив его в структуру. Эта идея называется псевдоним шаблона и является частью стандарта C ++ 0x ( предложение ). Но обходной путь дается:

template<class B, class C>
struct Y {
  typedef X<std::vector<B>, B, C> type;
};

и используйте Y<B, C>::type в качестве желаемого типа.

И вы можете быть склонны думать, что gcc4.5 или VS2010 уже могут его поддерживать, как в случае с большим подмножеством C ++ 0x, но я должен вас разочаровать, поскольку, как мы говорим, все еще не поддерживается .

...