c++ - 基于其他模板定义从模板类到原始类型的隐式转换

标签 c++ templates implicit-conversion

我有一个由两个模板定义的类。

template<typename A, typename B> my_class {
private:
    A value;

public:
    operator A () {
        return this->value;
    }
};

我想在模板中定义类和第一种类型之间的隐式转换,但只针对模板中特定的第二种类型。由于 A 是 C++ 原始类型,因此我无法在那一侧定义转换。我试过 std::enable_if 这样的

operator typename std::enable_if<std::is_same<B, specific_B_type>::value, NumT>::type () {
    return this->value;
}

但是我得到了编译错误

Error   C2833   'operator type' is not a recognized operator or type    dimensional_analysis

有什么方法可以做到这一点而不必定义专门用于 B = specific_B_type 的整个类?

最佳答案

您可以使用 static_assert 来检查是否允许转换:

operator A() 
{
    static_assert(std::is_same<B, specific_B_type>::value, "No conversion possible");    
    return this->value;
}

但是,这意味着如果 B 不是 specific_B_type,则无法显式转换为 A。如果你需要,你可以看看this的答案。关于根据模板参数添加和删除成员的问题。

关于c++ - 基于其他模板定义从模板类到原始类型的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46840294/

相关文章:

c++ - "Ambiguous conversion sequence"- 这个概念的目的是什么?

c++ - 为什么有些关键字在 CodeBlocks IDE(C++) 中显示为绿色?

c++ - 分配给全局范围内的函数指针

c++ - 这段代码的递归形式是什么?

c++ - 从表达式 `wchar_t + wchar_t[]` 到 std::wstring 的隐式转换中的垃圾值

scala - 在参与者系统中隐式传递请求上下文

c++ - 将指向类对象的智能指针与类对象混合

c++ - 为 STL 类型添加推导指南有哪些选项

c++ - 自动推断模板中的函数类型

python - 如何创建 XML 模板?