首页 > 解决方案 > 如何使用参数初始化作为模板参数给出的类

问题描述

我一直在寻找几个小时来找到一个类似的问题,而我最接近的是找到如何使用默认构造函数进行初始化。

无论如何,下面的类将只接收基类型或创建的类——所有这些都具有相同的构造函数

template<class T>
struct Foo
{
     Foo(std::vector<unsigned char> data)
     {
          T value;
          if(std::is_fundamental<T>::value)
               memcpy(&value, &data[0], sizeof(T));
          else
               value = T(data);
     }
}

这给了我以下错误:

Error   C2440   '<function-style-cast>': cannot convert from 'initializer list' to 'T'

现在,扩大错误给了我这个

with
[
    T=float
]       

这似乎是说编译器正在使用 float 类型验证这一点,这 - 好吧,它为什么抱怨是有道理的。但是,除了将我的代码分叉为基类型的类和创建的类型的类之外,有什么办法可以摆脱这种情况吗?

标签: c++

解决方案


推荐阅读