美文网首页
is_union, is_class,integral_cons

is_union, is_class,integral_cons

作者: 404Not_Found | 来源:发表于2022-03-01 23:15 被阅读0次
    • 作者: 雪山肥鱼
    • 时间:20220302122:55
    • 目的: is_union,is_class, integer_constant

    is_union

    struct A {};
    union B
    {
        int num;
        char type;
    };
    
    int main(int argc, char ** argv)
    {
    
        cout << is_union<A>::value << endl;
        cout << is_union<B>::value << endl;
        return 0;
    }
    

    c++17 中:

    struct A {};
    union B
    {
        int num;
        char type;
    };
    
    int main(int argc, char ** argv)
    {
    
        cout << is_union_v<A> << endl;//0
        cout << is_union_v<B> << endl;//1
        return 0;
    }
    

    is_class

    struct A {};
    union B
    {
        int num;
        char type;
    };
    
    int main(int argc, char ** argv)
    {
        cout << is_class<A>::value << endl;//1
        cout << is_class<B>::value << endl;//0
        return 0;
    }
    

    integral_constant

    template<class T,
        T _Val>
        struct integral_constant
    {   // convenient template for integral constant types
        static constexpr T value = _Val;
    
        using value_type = T;
        using type = integral_constant;
    
        constexpr operator value_type() const noexcept
        {   // return stored value
            return (value);
        }
    
        _NODISCARD constexpr value_type operator()() const noexcept
        {   // return stored value
            return (value);
        }
    };
    
    int main(int argc, char **argv)
    {
    
        cout << std::integral_constant<int, 15>::value << endl;//1
        cout << std::integral_constant<bool, true>::value << endl;//15
        return 0;
    }
    

    integral_constant 是一个包装目的的类

    struct A {};
    union B
    {
        int num;
        char type;
    };
    
    int main(int argc, char **argv)
    {
    
        cout << std::integral_constant<int, 15>::value << endl;//1
        cout << std::integral_constant<bool, true>::value << endl;//15
    
        std::integral_constant<bool, !is_union<B>::value> myobj1;
        cout << myobj1.value << endl;
    
        std::integral_constant<bool, !is_union<A>::value> mobj2;
        cout << mobj2.value << endl;
        return 0;
    }
    

    将 !is_union<B>::value 这个值 包装成一个类型,类型为 integral_constant<bool, !is_union<B>::value>

    在很多需要类型的场合中,就可以使用这个类型。
    is_union<B>::value 在编译的适合就确定了。

    相关文章

      网友评论

          本文标题:is_union, is_class,integral_cons

          本文链接:https://www.haomeiwen.com/subject/rhaerrtx.html