[英]C++11 Type Traits: Arithmetic user type
例:
struct IntWrapper { int x; operator int() const { return x; } ... }
static_assert(std::is_integral<IntWrapper>::value, "Invalid type.");
是否有可能使std :: is_integral <IntWrapper> :: value为true?
谢谢。
是否有可能使
std::is_integral<IntWrapper>::value
为true?
对的,这是可能的。 但并非没有创建未定义的行为。 即,当您尝试执行此操作时,所产生的不确定行为可能正是您想要的。 或者可能是您不想要的大多数东西。 测试无济于事。
但是,一切并没有丢失。 您可以轻松创建自己的特质来完成您想要的事情。 例如:
template <class T>
struct IsMyInt
: std::is_integral<T>
{
};
template <>
struct IsMyInt<IntWrapper>
: std::true_type
{
};
static_assert(IsMyInt<IntWrapper>::value, "Invalid type.");
IsMyInt
行为与您希望std::is_integral
IsMyInt
行为完全相同,但没有未定义的行为。 因此,现在您所要做的就是使用IsMyInt
而不是std::is_integral
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.