【发布时间】:2017-04-11 11:21:27
【问题描述】:
我有这样的课:
struct X
{
enum Type { INT, FLOAT };
using val_t = std::tuple<int, float>;
X(Type t) : type(t) {}
Type type;
template<typename T>
X& operator =(T x)
{
// ???
static_assert(T is the same as `type');
// ???
std::get<type>(val) = x;
return *this;
}
val_t val;
};
如果用户尝试分配不兼容的值,是否可以在编译时断言?
例如:
X x1(X::INT);
x1 = 5; // OK
x1 = 3.14; // compilation error
注意:我更喜欢将类保留为不是模板,因为我需要将其实例保留在集合中(例如 std::vector 等)。
【问题讨论】:
-
如果模板类而不是方法,是的,可能会出现编译时错误。
-
std::is_same检查 T 是否为 float/int/whatever en.cppreference.com/w/cpp/types/is_same -
@Jarod42,我编辑了我的问题,提到我不想将其保留为模板,因为该类的实例保存在
std::vector中。 -
X x1(rand() ? X::INT : X::FLOAT);x1 = 5.2;- 确定还是错误? -
@Raxvan,你能提供一个代码示例吗?谢谢。
标签: c++ templates sfinae enable-if