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++ 为什么可以';t模板非类型参数应为类类型 类示例{ // ... }; 模板//错误 类MyExample{ // ... };_C++_Templates_Types - Fatal编程技术网

C++ 为什么可以';t模板非类型参数应为类类型 类示例{ // ... }; 模板//错误 类MyExample{ // ... };

C++ 为什么可以';t模板非类型参数应为类类型 类示例{ // ... }; 模板//错误 类MyExample{ // ... };,c++,templates,types,C++,Templates,Types,我的问题是,为什么模板非类型参数不能是类类型 我得到的错误是 错误:“类示例”不是模板常量参数的有效类型,原因很简单,因为这些是规则。合理地说,模板参数必须在编译时解析,类类型的对象只在运行时构造(即使是临时对象和具有静态存储持续时间的对象)。您只能拥有在编译时可解析的“值”模板参数,例如整数和类型。但是,也可以使用指向对象的指针或引用的模板参数。根据 显然,任何STD一致编译器都会声明一个错误,如果你声明类为非类型模板参数。 < P>从C++ 20开始,现在支持。请澄清,你看到了哪种编译器错误

我的问题是,为什么模板非类型参数不能是类类型

我得到的错误是


错误:“类示例”不是模板常量参数的有效类型,原因很简单,因为这些是规则。合理地说,模板参数必须在编译时解析,类类型的对象只在运行时构造(即使是临时对象和具有静态存储持续时间的对象)。您只能拥有在编译时可解析的“值”模板参数,例如整数和类型。但是,也可以使用指向对象的指针或引用的模板参数。

根据


显然,任何STD一致编译器都会声明一个错误,如果你声明类为非类型模板参数。

< P>从C++ 20开始,现在支持。

请澄清,你看到了哪种编译器错误?试试(例子*EX)。它会起作用:]也许(示例和ex)会起作用。试试看。应该有用!由于“-引用对象或引用函数,”
class Example {

   // ...
};

template <typename T, Example ex>  //Error
class MyExample{

   // ...
};
A non-type template-parameter shall have one of the following (optionally cv-qualified) types:
— integral or enumeration type,
— pointer to object or pointer to function,
— reference to object or reference to function,
— pointer to member.

A non-type template-parameter shall not be declared to have floating point, **class**, or void type.