模板函数内联的编译错误

时间:2015-03-18 21:38:00

标签: c++ templates

我有一个简单的模板函数,它使用两个参数:

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

功能声明对我来说是正确的,这里的问题是什么?

1 个答案:

答案 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());