我有一些类:
template<int DIMENSION, typename T> Vector { ... }
现在,我想专门化typename并使用typedef提供一个新类型。因此,我在C++ typedef for partial templates
处找到了StackOverflow的答案我这样做了:
template < int DIMENSION> using VectorDouble= Vector<DIMENSION, double>;
这不编译(错误C2988:无法识别的模板声明/定义)。这是因为我的编译器(Visual Studio 2008)不允许它,或者我错过了什么?
感谢。
答案 0 :(得分:4)
下一个标准支持模板typedef-基本上,只有真正的,真正真正的新编译器支持它。即使是最新的VS也不支持它,因为它不够新,这就是新的C ++ 0x。
在C ++ 03中,通常使用结构。
template<int dimension> struct vector_double {
typedef Vector<dimension, double> type;
};
现在可以像
一样访问它int main() {
vector_double<5>::type vec_double;
}
答案 1 :(得分:2)
你提到的答案是:
如果你有一个C ++ 0x / C ++ 1x编译器
C ++ 1x还不是最新的,所以大多数编译器都不支持它的功能。特别是VC ++ 9.0(VS2008)几乎不支持它们。 VC ++ 10(VS2010)确实支持一些功能,但我不知道你需要的是其中之一。