要定义模板化类,我考虑三个不同的文件.声明位于.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*,我试图doSomething在bar-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
有人知道是否可以这样做?
方法模板的工作方式与函数模板完全相同。您需要在使用时显式实例化它们,除非可以从调用中派生模板参数。
因此,您实际上不需要进行专门化,您需要做的是FooType在使用时指定:
Bar<float> somevar; somevar.doSomething< Foo<float> >(somevalue);
如果您总是想返回,Foo<T>*那么只需使用Foo<T>* doSomething(int);
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |