0

Does the following default argument for the template instantiates a template with type EmptyClass?

class EmptyClass{};

template <typename TYPE=EmptyClass>
class Sample
{
public:
    static void test()
    {
        TYPE::Serialize();
    }
};
4

2 回答 2

0

不会。模板在使用时被实例化,并且在每个函数的基础上被实例化。

默认参数值只是未指定参数时使用的类型。但它们本身并不意味着使用。

当您调用Sample<>::test()thenSample<Emptyclass>::test()被实例化并EmptyClass::serialize()尝试调用时,导致编译时错误(因为Emptyclass被声明为没有这样的功能)

尝试编写更多函数,包含引用不同参数的不同编译时错误,您将看到如何在不使用该函数之前不产生错误。

于 2016-11-27T15:38:43.587 回答
-1

不,在该代码中创建了 EmptyClass 的任何实例。序列化是一个静态函数。并且 EmptyClass 的构造函数永远不会被调用(在显示的代码中)

于 2016-03-21T12:49:00.047 回答