是否为模板类的默认参数,实例化模板?

时间:2016-03-21 12:32:30

标签: c++ templates default-arguments template-instantiation

模板的以下默认参数是否实例化了类型为EmptyClass的模板?

class EmptyClass{};

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

2 个答案:

答案 0 :(得分:0)

没有。模板在使用时被实例化,并在每个功能的基础上实例化。

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

当您调用Sample<>::test()时,Sample<Emptyclass>::test()被实例化并尝试EmptyClass::serialize()调用,导致编译时错误(因为Emptyclass被声明为没有此类函数)

尝试补充更多功能,包含引用不同参数的不同编译时错误,并且您将看到在不使用该函数之前不会产生错误。

答案 1 :(得分:-1)

不,在该代码中创建了任何EmptyClass实例。 Serialize是一个静态函数。并且从不调用EmptyClass的构造函数(在代码中显示)