从非模板参数化方法返回模板类型

时间:2010-11-18 16:33:46

标签: c++ templates

要定义模板化类,我会考虑三个不同的文件。声明位于.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

有人知道是否可以这样做?

1 个答案:

答案 0 :(得分:1)

方法模板的工作方式与功能模板完全相同。除非可以从调用派生模板参数,否则您需要在使用时显式实例化它们。

所以你真的不需要专业化,你需要做的是在使用时指定FooType

Bar<float> somevar; somevar.doSomething< Foo<float> >(somevalue);

如果您始终想要返回Foo<T>*,请使用Foo<T>* doSomething(int);