我有一个我写过的类,它可以进行类型擦除。公共接口是:
template <typename T>
value(const T &t);
value(value &&v);
template <typename T>
operator T() const;
当我从 std::string 创建一个值实例时,我没有问题,一切都按预期工作。当我尝试使用 来取回 std::string 时static_cast<std::string>(val)
,其中val
是保存 std::string 的值的实例,我从 VS2012 收到以下错误:
错误 C2440: 'static_cast' : 无法从 'value' 转换为 std::string'
没有构造函数可以采用源类型,或者构造函数重载决议不明确
如果我注释掉模板化转换运算符并添加,operator std::string() const
那么它会编译。我认为 std::string 构造函数和模板化强制转换运算符之间的某些东西具有相同的匹配度。谁能建议正在发生的事情以及如何解决它?