С++ 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, но я должен вас разочаровать, это, как мы говорим, еще не поддерживается:).