所以我有这个模板函数。 它应该设置一个变量在一个名为AbstractEvent
更复杂的结构:模板函数实现中的条件取决于类型是否是指针
template< typename T >
void AbstractEvent::setVar(QString varName, T value)
{
if (std::is_pointer<T>::value)
{
void * castValue = static_cast<void*>(value);
if (castValue)
{
//do sth with castValue
}
}
else
{
//do something with value
}
}
有了这个模板的功能,我想存储在一个的QVariant变量“值”,然后保存的QVariant地方。
如果“value”是一个指针,我想将它作为void *存储在QVariant中。对于其他任何我想存储真实类型的东西。
我试着用C++ trait std :: is_pointer :: value来检查值是否是一个指针。
此代码编译罚款,但是当我尝试使用它,用,例如:
int intValue = 0;
setVar<int>("aVar",intValue);
我得到这个错误:
error C2440: 'static_cast' : unable to convert from 'int' to 'void *'
我觉得编译器是困惑,因为它的检查这一行:
void * castValue = static_cast<void*>(value);
当然,当值不是指针时,它当然没有意义。这就是我的if语句
if (std::is_pointer<T>::value)
应该避免的,但是,即使在运行时,这段代码以价值为int将永远不会被执行,在编译时它混淆编译器是...有没有解决这类问题的方法?
我需要开始参加Complexity Anonymous。 – 2014-10-20 13:45:52