簡體   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