定义基于其他模板从模板类到基元类型的隐式转换

时间:2017-10-19 23:27:08

标签: 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的整个类?

1 个答案:

答案 0 :(得分:1)

您可以使用static_assert检查是否应允许转化:

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

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