hkB*_*sai 12 c++ templates class
我看到两个不同的模板类声明:
template <class T> class SampleClass1
{
// ...
};
Run Code Online (Sandbox Code Playgroud)
和
template <typename T> class SampleClass2
{
// ...
};
Run Code Online (Sandbox Code Playgroud)
这两个代码有什么区别?
编辑:我将错误的关键字"typedef"更正为"typename".
Cha*_*via 18
如果通过
template <typedef T> class SampleClass2
Run Code Online (Sandbox Code Playgroud)
你的意思是
template <typename T> class SampleClass2
Run Code Online (Sandbox Code Playgroud)
那就没有区别了.使用的class和typename(在是指一种类型的模板的参数的上下文中)是可互换的.
这里允许两个关键字的原因是历史性的.有关详细说明,请参阅此文章.
Ind*_*ant 15
在模板模板参数的情况下
template <typename T, template <typename> class Wrapper>
class Foo {
//...
private:
Wrapper<T> data;
};
Run Code Online (Sandbox Code Playgroud)
你必须在classname之前使用class.这是错的:
template <typename T, template <typename> typename Wrapper>
Run Code Online (Sandbox Code Playgroud)
但这没关系:
template <typename T, template <class> class Wrapper>
Run Code Online (Sandbox Code Playgroud)
在其他情况下,它们是可互换的.