use*_*264 6 c++ oop class constants typename
我应该写:
template<class T> class Foo {
typename const T* x;
};
Run Code Online (Sandbox Code Playgroud)
或者:
template<class T> class Foo {
const typename T* x;
};
Run Code Online (Sandbox Code Playgroud)
typename需要与您想要获得的类型相匹配。例如,如果您有
template <typename T>
void foo(T& t)
{
typename const T::iterator bar = t.begin();
}
int main()
{
std::vector<int> bar{1,2,3}
foo(bar);
}
Run Code Online (Sandbox Code Playgroud)
你会得到一个编译器错误,typename const T::const_iterator bar = t.begin();类似于
预期在“const”之前有嵌套名称说明符
然而
const typename T::iterator bar = t.begin();
Run Code Online (Sandbox Code Playgroud)
效果很好。
有关何时、何地、为何以及template需要typename出现的全面说明,请参阅:Where and Why do I have to put the "template" and "typename" keywords?
typename不是这样使用的,因此这两种情况都是无效的,并且应该产生编译错误,如下所示:
main.cpp:4:20: error: expected a qualified name after 'typename'
const typename T* x;
^
Run Code Online (Sandbox Code Playgroud)
在这里你需要一些类似的东西T::myType来继续。
或者甚至是更糟糕的:
main.cpp:4:14: error: expected a qualified name after 'typename'
typename const T* x;
^
main.cpp:4:14: error: expected member name or ';' after declaration specifiers
Run Code Online (Sandbox Code Playgroud)
引入关键字 typename 来指定后面的标识符是类型
阅读更多内容:正式地,typename 的用途是什么?