模板的默认参数class,是否实例化模板?
Does default argument of template class, instantiate the template?
模板的以下默认参数是否实例化了类型为 EmptyClass
的模板?
class EmptyClass{};
template <typename TYPE=EmptyClass>
class Sample
{
public:
static void test()
{
TYPE::Serialize();
}
};
不,在该代码中创建了 EmptyClass 的任何实例。序列化是一个静态函数。并且 EmptyClass 的构造函数从未被调用(在代码中显示)
没有。模板在使用时实例化,并在每个函数的基础上实例化。
默认参数值只是在未指定参数时使用的类型。但本身并不暗示用法。
当您调用 Sample<>::test()
时,Sample<Emptyclass>::test()
被实例化并尝试调用 EmptyClass::serialize()
,导致编译时错误(因为 Emptyclass
被声明为没有这样的函数)
尝试编写更多函数,包含引用不同参数的不同编译时错误,您将看到如何在不使用该函数之前不产生错误。
模板的以下默认参数是否实例化了类型为 EmptyClass
的模板?
class EmptyClass{};
template <typename TYPE=EmptyClass>
class Sample
{
public:
static void test()
{
TYPE::Serialize();
}
};
不,在该代码中创建了 EmptyClass 的任何实例。序列化是一个静态函数。并且 EmptyClass 的构造函数从未被调用(在代码中显示)
没有。模板在使用时实例化,并在每个函数的基础上实例化。
默认参数值只是在未指定参数时使用的类型。但本身并不暗示用法。
当您调用 Sample<>::test()
时,Sample<Emptyclass>::test()
被实例化并尝试调用 EmptyClass::serialize()
,导致编译时错误(因为 Emptyclass
被声明为没有这样的函数)
尝试编写更多函数,包含引用不同参数的不同编译时错误,您将看到如何在不使用该函数之前不产生错误。