比较If语句中的数据类型

Fra*_*ler 2 c++ if-statement function-templates

有没有办法在if语句中测试参数的数据类型?这是一个源代码示例:它不会编译,但它用于表达我的意图.

typedef char cInt[sizeof(int)];
typedef char cFloat[sizeof(float)];
typedef char cDouble[sizeof(double)];

template<typename T>
char* convertToCharStr( const T& t ) {
    if ( t == int ) {
        cInt c = t;
        return c;
     }
     if ( t == float ) {
        cFloat c = t;
        return c;
     }
     if ( t == double ) {
        cDouble c = t;
        return c;
     }
     return nullptr;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在尝试创建一个模板函数,它可以采用任何默认数据类型,如int,unsigned int,float,double,并根据数据类型,它将在堆栈上创建相应的char []变量.传入的数据类型并将数据存储到char []并将指针返回函数.

我会把它放在它的上面,但作为一个注释,字符数组应该是unsigned char.

Rol*_*len 7

好吧,有一些方法使用typeid这里完成使用typeid检查模板类型,但我建议使用模板专业化,如下所示:

template<typename T>
char* convertToCharStr( const T& t ) {
    //Maybe you might feel it more appropriate to put a static assert here 
    return nullptr; 
}

template<>
char* convertToCharStr( const int& t ) {
    cInt c = t;
    return c;
}

template<>
char* convertToCharStr( const float& t ) {
    cFloat c = t;
    return c;
}

template<>
char* convertToCharStr( const double& t ) {
    cDouble c = t;
    return c;
}
Run Code Online (Sandbox Code Playgroud)

请参阅CPP参考和此问题,了解更多关于它的讨论(以及您还可以做些什么......以避免专门模板的痛苦).C++模板专业化语法

话虽这么说,在堆栈上创建一个变量,然后返回一个指向它的指针是不安全的,因为该函数将在函数调用返回时被取消堆栈,并可能在以后被覆盖.