【发布时间】:2022-01-04 14:09:56
【问题描述】:
我有一个包含某种类型并附加维度的类。它应该可以转换为基础类型,但前提是Dim=0。转换运算符在其他情况下不应被调用(因此函数中的 static_assert 对我不起作用)。
如果enable_if-construction 被删除,以下代码有效,但不是这种形式。
template<class T, int Dim>
class Unit {
public:
explicit Unit(T const& value): _value(value) {}
template<int D = Dim, typename = typename std::enable_if<D == 0>::type>
operator T() { return _value; }
private:
T _value;
};
auto main() -> int
{
auto a = double{0};
auto u = Unit<double, 0>{a};
auto i = static_cast<int>(u);
return i;
}
这是什么原因,是否有解决方法允许强制转换,但也限制转换?
【问题讨论】:
-
它应该可以转换为基础类型,但是您正在从
double构造u并尝试将其转换为int,这不是我猜是“底层类型”。你能澄清一下吗?
标签: c++ type-conversion sfinae