模板类的默认参数,实例化模板
Does default argument of template class, instantiate the template?
模板
的以下默认参数是否实例化类型为 EmptyClass
的模板?
class EmptyClass{};
template <typename TYPE=EmptyClass>
class Sample
{
public:
static void test()
{
TYPE::Serialize();
}
};
No.模板在使用时实例化,并基于每个函数进行实例化。
默认参数值只是未指定参数时要使用的类型。但本身并不意味着使用。
当您调用Sample<>::test()
时,Sample<Emptyclass>::test()
被实例化并尝试EmptyClass::serialize()
调用,从而导致编译时错误(因为Emptyclass
被声明为没有此类函数)
尝试编造更多的函数,包含引用不同参数的不同编译时错误,您将看到如何在不使用函数之前不产生错误。
不,在该代码中创建了 EmptyClass 的任何实例。序列化是一个静态函数。并且永远不会调用 EmptyClass 的构造函数(在代码中显示)
相关文章:
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 如果模板参数是另一个模板的实例化,则键入特征测试
- 如何在模板函数中实例化其长度使用模板参数的数组
- 函数在可变参数模板的实例化期间不可见
- 实例化模板时,我是否必须显式显示参数包中的类型?
- 从模板参数包实例化的访问类实现
- C++ 可变参数模板实例化深度超过最大值 900
- 与参数匹配的友元模板函数实例化
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 在编译时检查未实例化的类模板是否继承自其第一个模板参数
- 实例化模板参数的参数包
- SFINAE 和模板函数实例化:为什么在启用了 SFINAE 类型的函数参数中使用模板参数时无法推断模板参数?
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 无法实例化抽象类,但类不是抽象/派生方法的参数
- 有没有办法将一对元组剥离为可变参数模板类型或实例化具有可变参数类型的东西?
- unique_ptr 使用尚未定义的参数进行实例化不会导致错误
- 根据运行时参数避免模板实例化的代码重复
- 编译时检查是否有两个具有相同模板参数的模板实例化
- 如何编写模板重载函数,并在模板参数不允许实例化某个类时触发回退
- 在不使用"new"的情况下实例化参数参数中的对象