我有一个简单的模板函数,它使用两个参数:
template<typename To, typename From>To* asSomething( Common *item)
{
From * tdnItem = downcast( item, From );
To * someClass = NULL;
if( tdnItem != NULL )
{
someClass = downcast( tdnItem->gloo(), To );
}
return someClass;
}
稍后,我在另一个内联方法中调用此辅助方法:
return asSomething<ToFoo, FromFoo>(item);
但是,我在Visual Studio中遇到了一个奇怪的编译错误:
error C2065: 'FromTmeta' : undeclared identifier
see reference to function template instantiation 'To *asSomething<ToFoo,FromFoo>(Common * *)' being compiled
with
[
To=ToFoo
]
error C2065: 'ToTmeta' : undeclared identifier
功能声明对我来说是正确的,这里的问题是什么?
答案 0 :(得分:2)
我怀疑downcast
是一个预处理器宏。如果您使用参数将其他内容连接到该类型,则预处理器宏和模板参数将无法正常工作。
替换
From * tdnItem = downcast( item, From );
通过
From * tdnItem = dynamic_cast<From*>(item);
和
someClass = downcast( tdnItem->gloo(), To );
通过
someClass = dynamic_cast<To*>( tdnItem->gloo());