有没有一种方法可以在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;
}
如您所见,我正在尝试创建一个模板函数,该函数可以采用任何默认数据类型,例如int,unsigned int,float,double,并且根据数据类型,它将根据堆栈在栈上创建适当的char []变量。转换为传入的数据类型,并将数据存储到char []中,然后将指针返回该函数。
我将其保留原样,但请注意,字符数组应为未签名的char。
嗯,有一些方法可以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;
}
请参阅CPP参考和有关此问题的更多讨论(以及您可以采取其他措施避免专业模板制作的麻烦)。C ++模板专业化语法
话虽这么说,在堆栈上创建一个变量然后返回指向它的指针是不安全的,因为该变量将在函数调用返回时被取消堆栈,并且稍后可能会被覆盖。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句