突破编程_C++_C++11新特性(type_traits的复合类型特性以及关系类型特性)-1 type_traits 复合类型特性

1.1 std::is_function

std::is_function 是一个模板类,用于检查一个类型是否为函数类型。

定义:

template< class T >  
struct is_function;

当 T 为函数类型则为 true,否则为 false。

样例:

#include <iostream>  
#include <type_traits>  
  
int myFunction() { return 0; }  
  
int main() {  
    std::cout << std::boolalpha;  
    std::cout << "myFunction is " << std::is_function<decltype(myFunction)>::value << '\n'; // 输出 true  
    std::cout << "int is " << std::is_function<int>::value << '\n'; // 输出 false  
    return 0;  
}

1.2 std::is_class

std::is_class 是一个模板类,用于检查一个类型是否为类类型(不包括联合体)。

定义:

template< class T >  
struct is_class;

当 T 为类类型(不包括联合体)则为 true,否则为 false。

样例:

#include <iostream>  
#include <type_traits>  
  
struct MyClass {};  
union MyUnion {};  
  
int main() {  
    std::cout << std::boolalpha;  
    std::cout << "MyClass is " << std::is_class<MyClass>::value << '\n'; // 输出 true  
    std::cout << "MyUnion is " << std::is_class<MyUnion>::value << '\n'; // 输出 false  
    std::cout << "int is " << std::is_class<int>::value << '\n'; // 输出 false  
    return 0;  
}

1.3 std::is_union

std::is_union 是一个模板类,用于检查一个类型是否为联合体(union)类型。

定义:

template< class T >  
struct is_union;

当 T 为联合体类型则为 true,否则为 false。

样例:

#include <iostream>  
#include <type_traits>  
  
struct MyClass {};  
union MyUnion {};  
  
int main() {  
    std::cout << std::boolalpha;  
    std::cout << "MyClass is " << std::is_union<MyClass>::value << '\n'; // 输出 false  
    std::cout << "MyUnion is " << std::is_union<MyUnion>::value << '\n'; // 输出 true  
    std::cout << "int is " << std::is_union<int>::value << '\n'; // 输出 false  
    return 0;  
}

1.4 std::is_enum

std::is_enum 是一个模板类,用于检查一个类型是否为枚举类型。

定义:

template< class T >  
struct is_enum;

当 T 为枚举类型则为 true,否则为 false。

样例:

#include <iostream>  
#include <type_traits>  
  
enum MyEnum { ENUM_VALUE };  
  
int main() {  
    std::cout << std::boolalpha;  
    std::cout << "MyEnum is " << std::is_enum<MyEnum>::value << '\n'; // 输出 true  
    std::cout << "int is " << std::is_enum<int>::value << '\n'; // 输出 false  
    return 0;  
}

1.5 std::is_member_function_pointer

std::is_member_function_pointer 是一个模板类,用于检查一个类型是否为成员函数指针类型。

定义:

template< class T >  
struct is_member_function_pointer;

当 T 为为成员函数指针类型则为 true,否则为 false。

样例:

#include <iostream>  
#include <type_traits>  
  
struct MyClass {  
    void myMemberFunction() {}  
};  
  
int main() {  
    std::cout << std::boolalpha;  
    std::cout << "Pointer to member function is "  
              << std::is_member_function_pointer<void (MyClass::*)()>::value << '\n'; // 输出 true  
    std::cout << "Pointer to data member is "  
              << std::is_member_function_pointer<int (MyClass::*)>::value << '\n'; // 输出 false  
    std::cout << "int is " << std::is_member_function_pointer<int>::value << '\n'; // 输出 false  
    return 0;  
}

1.6 std::is_member_object_pointer

std::is_member_object_pointer 是一个模板类,用于检查一个类型是否为成员对象指针类型。

定义:

template< class T >  
struct is_member_object_pointer;

当 T 为成员对象指针类型则为 true,否则为 false。

样例:

#include <iostream>  
#include <type_traits>  
  
struct MyClass {  
    int myMemberVariable;  
};  
  
int main() {  
    std::cout << std::boolalpha;  
    std::cout << "Pointer to member object is "  
              << std::is_member_object_pointer<int (MyClass::*)>::value << '\n'; // 输出 true  
    std::cout << "Pointer to member function is "  
              << std::is_member_object_pointer<void (MyClass::*)()>::value << '\n'; // 输出 false  
    std::cout << "int is " << std::is_member_object_pointer<int>::value << '\n'; // 输出 false  
    return 0;  
}
上一篇:Pytorch DataLoader 提高模型训练时的 Volatile Gpu-Util(GPU利用率)


下一篇:【JavaScript】NPM常用指令指南