我为typeinfo
写了一个小包装,以便在编译时更轻松地获取变量的类型代码:
template<typename DataType>
class TypeInfo
{
public:
static const char* typecode()
{
DataType TypedVariable = 0;
const char* code = typeid(TypedVariable).name();
return(code);
};
};
我这样使用它:
const char* code = TypeInfo<float>::typecode();
它可以很好地编译并且可以按预期工作,但是我得到警告了
src/common.hh(153): warning: variable "TypedVariable" was set but never used
detected during:
instantiation of "char TypeInfo<DataType>::typecode() [with DataType=r32]"
...
我想知道为什么在变量上“调用” typeid()
不算作使用它。我知道这是一个已定义的关键字,但仍然让我感到恼火的是,获取变量的类型并不算作使用它。
使用CUDA 9.2的nvcc
完成编译。也许是CUDA特有的东西?
感谢您的帮助:)
//编辑: 我由于不返回完整的char *而犯了一个错误,因为我仅使用普通类型!感谢您让我知道错字!我还添加了模板定义。我忘了抄过来!
答案 0 :(得分:2)
因为您没有使用TypedVariable
的值。您只需使用它的类型(就可以通过将初始化重写为以下方式来获得它的类型:
char const * const code = typeid(DataType).name();