为了定义模板类,我考虑了三个不同的文件。该声明位于.h
文件中,方法实现位于.cpp
文件,并且显式实例化包含在.inc
文件(通过在 .cpp 末尾添加一行,例如:#include "bar-impl.inc"
).
现在,这是我的问题。我有两个模板类,例如:Foo<S>
and Bar<T>
。
里面的Bar<T>
类,我有一个返回模板类型的方法FooType*
(通过我的显式实例化,我希望它是,例如,Foo<float>*
)
template<class T>
class Bar{
....
template <class FooType>
FooType* doSomething(int);
....
};
由于编译器不知道什么FooType*
是,我尝试显式实例化doSomething
方法中的bar-impl.inc
file.
//bar-impl.inc
template class Foo<float> * Bar<float>::doSomething(int);
但是,它不起作用,我收到以下错误:no matching function for call to
‘Bar<float>::doSomething(int&)’
make: *** [main] Error 1
有谁知道是否可以这样做?
方法模板的工作方式与函数模板完全相同。您需要在使用时显式实例化它们,除非可以从调用中派生模板参数。
所以你真的不需要专门化,你需要做的是指定FooType
使用时:
Bar<float> somevar; somevar.doSomething< Foo<float> >(somevalue);
如果你总是想回来Foo<T>*
然后只需使用Foo<T>* doSomething(int);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)