要定義模板化類,我考慮三個不同的文件。該聲明位於.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*
是,我試圖明確實例化bar-impl.inc
文件中的doSomething
方法。
//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
有誰知道是否有可能做到這一點?
謝謝!但是因爲我將聲明與模板類的實例化分開,所以無論如何我都需要做明確的實例化,不是嗎? – Javier 2010-11-18 16:55:05
@Javier如果你把你的模板代碼放在'.cpp'文件中,那麼你需要明確地實例化所有的模板,因爲編譯器不能爲你做。但是你遇到的問題是無關的。你有一個模板化的方法,並試圖調用一個非模板方法(它不存在)。 – 2010-11-18 16:57:28
好,所以,我應該有:模板 Bar類{ .... 模板 富 * DoSomething的(INT); .... };你在暗示什麼?如果我不想總是返回Foo *。對不起,我有點困惑。你介意在我怎樣稱之爲doSomething方法中包含'main.cpp'例子? –
Javier
2010-11-18 17:01:28