繁体   English   中英

C ++ 11类型特性:算术用户类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM