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