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

标签 c++ templates

假设以下虚拟模板:

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

private:
    DataType m_data;
};

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

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

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

我认为例如STL 必须实现这样的想法,但我迷失在该代码中。

最佳答案

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

DataType( 0 );

不是:

Data ( 0 );

无论如何,尝试:

m_data = DataType();

这将为类类型调用默认构造函数,或者为内置类型调用零初始化。

关于C++/模板/模板类型的显式初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7823628/

相关文章:

c++ - 与三值比较函数相比,仅使用小于运算符进行排序

c++ - 使用 Text Fixtures -- Google 测试

c++ - 构造函数不更新类成员变量

c++ - 如何在 Windows 上使用 GetSaveFileName 检测 "Save as type:"组合框何时更改?

c++ - 完全特化的模板功能

templates - 如何在 html/template 中的操作后控制空格?

c++ - 比较两个 bigints c++

asp.net - CSS 不会出现在一个 asp.net 页面上,在其他页面上没问题

templates - 根据模板客户端隐藏模板的特定部分

c++ - 为什么调用 dtor(使用 annoymous/lambda func)