c++模板和基本数据类型

C++ templates and basic data types

本文关键字:数据类型 c++      更新时间:2023-10-16

是否有办法告诉模板参数是一个特定的基本数据类型,如int或unsigned int?Std::is_base_of做不到,试过了。我想写集合,可以框所有的基本数据类型,但我找不到一种方法来告诉它是哪种类型…

使用is_same。如果您没有实现(std或boost),则使用以下命令:

template < typename T1, typename T2 >
struct is_same { enum { value = false }; };
template < typename T >
struct is_same <T,T> { enum { value = true }; };

一些有用的:

std::is_integral

std::is_floating_point

std::is_arithmetic

如果您需要更狭义的定义,您可以将几个std::is_same特征组合在一起,例如

template<typename T>
struct is_int_or_char_or_float {
    static const bool value =
        std::is_same<T, int>::value ||
        std::is_same<T, char>::value ||
        std::is_same<T, float>::value;
};

如果您想知道它是否是一个特定的类型,您可以使用std::is_same:

#include <type_traits>
bool isInt = std::is_same<int, T>::value;

如果你想知道它是否是整数类型,std::is_integral

bool isInt = std::is_integral<T>::value;

您可以使用以下代码:

#include <typeinfo>
#include <iostream>
class someClass { };
int main(int argc, char* argv[]) {
    int a;
    someClass b;
    std::cout<<"a is of type: "<<typeid(a).name()<<std::endl; // Output 'a is of type int'
    std::cout<<"b is of type: "<<typeid(b).name()<<std::endl; // Output 'b is of type someClass'
    return 0;
}