When can `typename` not be replaced by `class`?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
C++ difference of keywords 'typename' and 'class' in templates
我已经知道在很多情况下,
有人指出,这里只能使用
1 2 3 4 | template<class param_t> class Foo { typedef typename param_t::baz sub_t; }; |
但在这里(在MSVC中),用
不,不能总是用一个替换另一个。
名称消歧需要两个关键字
1 2 3 4 5 6 7 8 9 10 11 | template <typename T> struct Foo { char bar() { int x = T::zing; // value, no decoration for disambiguation of"T::zing" typedef typename T::bongo Type; // typename, require disambiguation of"T::bongo" return T::template zip<Type>(x); // template, require disambiguation of"T::zip" } }; |
只有关键字
模板模板参数不能使用typename:
1 2 3 4 5 6 7 8 | template < template <typename> class Container>, // cannot use typename for class typename T > struct TestMe { Container<T> _data; // ... etc. }; |
这是因为只有类可以模板化。