Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板参数和模板参数_C++_Templates_C++14 - Fatal编程技术网

C++ 模板参数和模板参数

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]; }

我对C++比较陌生(14)。我正在努力通过阅读中国的官方文件来提高我目前的知识水平。我对模板声明有一些疑问:page在类模板的声明中提供了以下可能的参数(非类型模板参数)

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


当然,这可能不是您想要的。

名称是可选的(The
N
),类型是必需的(The
int
)。但是在你的代码中,你实际上需要这个名字,所以你不能忽略它。你能举个例子吗,没有名字,只是类型?我试着在编辑中做这样一个例子,但也不起作用。当然。它不起作用,因为你实际上需要这个名字。这是有效的:
template struct S{}它对于转发声明很有用<代码>模板结构只是一个旁白-CPPPreference不是一套正式的文档。但是它们非常有用。我从Barry的评论中看到了
模板结构{}
的工作原理。但我认为这并不能解决任何问题。从@Kerndog73的回答中,我看到这可以用于模板类的正向声明。不过,我从未对模板类使用过转发声明。这种声明还有其他用途吗?模板类的前向声明?我会假设,你最初使用远期申报的同样理由仍然适用。
template <int N> // ...
template <class N> // ...