С++ typedef для частичных шаблонов

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

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

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

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

Спасибо, Gokul.

Ответы

Ответ 1

Если у вас есть компилятор С++ 0x/С++ 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 > {};

Ответ 2

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

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

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

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