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

Jav*_*ier 5 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);
 ....
};
Run Code Online (Sandbox Code Playgroud)

由于编译器不知道是什么FooType*,我试图doSomethingbar-impl.inc文件中显式实例化该方法.

//bar-impl.inc
template class Foo<float> * Bar<float>::doSomething(int);
Run Code Online (Sandbox Code Playgroud)

但是,它没有用,我得到一个错误: no matching function for call to ‘Bar<float>::doSomething(int&)’ make: *** [main] Error 1

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

Let*_*_Be 1

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

因此,您实际上不需要进行专门化,您需要做的是FooType在使用时指定:

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

如果您总是想返回,Foo<T>*那么只需使用Foo<T>* doSomething(int);