要定义模板化类,我会考虑三个不同的文件。声明位于.h
文件中,方法实现位于.cpp
文件中,显式实例化包含在.inc
文件中(通过在.cpp末尾添加一行) ,例如:#include "bar-impl.inc"
)。
现在,这是我的问题。我有两个模板类,比如:Foo<S>
和Bar<T>
。
在Bar<T>
类的内部,我有一个返回模板类型FooType*
的方法(我希望它具有我明确的实例化,例如,Foo<float>*
)
template<class T>
class Bar{
....
template <class FooType>
FooType* doSomething(int);
....
};
由于编译器不知道FooType*
是什么,我试图在doSomething
文件中显式实例化bar-impl.inc
方法。
//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
有人知道是否可以这样做?
答案 0 :(得分:1)
方法模板的工作方式与功能模板完全相同。除非可以从调用派生模板参数,否则您需要在使用时显式实例化它们。
所以你真的不需要专业化,你需要做的是在使用时指定FooType
:
Bar<float> somevar; somevar.doSomething< Foo<float> >(somevalue);
如果您始终想要返回Foo<T>*
,请使用Foo<T>* doSomething(int);