C++ 模板参数和模板参数
我对C++比较陌生(14)。我正在努力通过阅读中国的官方文件来提高我目前的知识水平。我对模板声明有一些疑问:page在类模板的声明中提供了以下可能的参数(非类型模板参数)C++ 模板参数和模板参数,c++,templates,c++14,C++,Templates,C++14,我对C++比较陌生(14)。我正在努力通过阅读中国的官方文件来提高我目前的知识水平。我对模板声明有一些疑问:page在类模板的声明中提供了以下可能的参数(非类型模板参数) type name(optional) // (1) 我的问题是: 1.类型名称是什么意思?我确信它与前面提到的typename不同 此外,我还看到了一个例子: // simple non-type template parameter template<int N> struct S { int a[N]; }
type name(optional) // (1)
我的问题是:1.
类型名称是什么意思?我确信它与前面提到的typename
不同
此外,我还看到了一个例子:
// simple non-type template parameter
template<int N>
struct S { int a[N]; };
那么,我对官方文件的理解/阅读哪里出了问题
编辑:
我尝试了以下方法:
template< int>
struct S { int a[N]; };
模板
结构S{inta[N];};
未编译时出现错误的'N'未在作用域中声明
要使其正常工作,N
必须是一个类型
模板只接受类型后跟该类型的可选名称。例如,这个可能会起作用(尽管我没有尝试过):
在这里,N
被声明为int
,因此您可以像使用int
一样使用它
注意:您还可以选择以下选项:
template <int N> // ...
template <class N> // ...
模板//。。。
在这里,N
成为类型的模板替代品。它不是上面提到的int
当然,这可能不是您想要的。名称是可选的(TheN
),类型是必需的(Theint
)。但是在你的代码中,你实际上需要这个名字,所以你不能忽略它。你能举个例子吗,没有名字,只是类型?我试着在编辑中做这样一个例子,但也不起作用。当然。它不起作用,因为你实际上需要这个名字。这是有效的:template struct S{}代码>它对于转发声明很有用<代码>模板结构代码>只是一个旁白-CPPPreference不是一套正式的文档。但是它们非常有用。我从Barry的评论中看到了模板结构{}
的工作原理。但我认为这并不能解决任何问题。从@Kerndog73的回答中,我看到这可以用于模板类的正向声明。不过,我从未对模板类使用过转发声明。这种声明还有其他用途吗?模板类的前向声明?我会假设,你最初使用远期申报的同样理由仍然适用。
template <int N> // ...
template <class N> // ...