C++/Template /模板类型的显式初始化?

Mar*_*ark 0 c++ templates

假设以下虚拟模板:

template < class DataType > class Dummy
{
public:
    void init( )
    {
        m_data = DataType( 0 );
    }

private:
    DataType m_data;
};
Run Code Online (Sandbox Code Playgroud)

调用init将初始化内部数据.当DataType是标准数据类型(例如int或float)时,这确实可以正常工作.当DataType是一个类时,该类必须具有相应的构造函数.

现在假设DataType应该是例如由合适的类表示的复数.在这种情况下,为复数类提供一个带有一个参数的构造函数是没有意义的,因为在正常条件下,您需要初始化实部和虚部.

所以我的问题是:在考虑模板适合存储任何数据类型的情况下,初始化模板类型的最佳通用方法是什么.

我认为例如STL必须实现这样的思考,但我在该代码中迷失了.

Dan*_*ker 5

在你的例子中我猜你的意思是:

DataType( 0 );
Run Code Online (Sandbox Code Playgroud)

不:

Data ( 0 );
Run Code Online (Sandbox Code Playgroud)

无论如何,请尝试:

m_data = DataType();
Run Code Online (Sandbox Code Playgroud)

这将调用类类型的默认构造函数,或者为内置类型调用zero-init.

  • +1:那么你必须要求任何作为参数传递的类是default-constructible,这是一个合理的要求(标准在几个地方使它,例如`std :: map`s value-type). (2认同)