我有兩個類(ClassA和ClassB),他們都有兩種方法(比較和收斂)。這些方法的工作方式完全相同,但這些類不是多態關聯的(出於很好的原因)。我想定義一個函數模板,這兩個類都可以顯式實例化爲一個成員,但我得到錯誤,因爲這些方法使用「this」,當我將它們變成模板時,編譯器會拋出錯誤,因爲它們不是成員函數。C++實例化函數模板作爲類成員並使用「this」指針
因爲這個限制,這是不可能的嗎?還是有一些方法可以在沒有聲明爲模板類的一部分的函數模板中使用「this」。我做了一些研究,沒有發現任何東西。
Logic.h
template <class T>
T* compare(const T& t) {
//stuff involving this
}
template <class T>
T* converge(const T& t,bool b) {
//other stuff involving this
}
ClassA.cpp
#include "ClassA.h"
#include "Logic.h"
//constructors
template ClassA* ClassA::compare(const ClassA& t) const;
template ClassA* ClassA::converge(const ClassA& t,bool b) const;
//other methods
CLASSB是相似的。
任何幫助表示讚賞!
它是_「函數模板」_,而不是「模板函數」,因爲這些東西不是函數,而是可以實例化哪些函數的_templates_。 – sbi 2010-09-17 08:41:19
「這些類不是多態相關的(出於很好的理由)。」 - 聽起來很像他們應該有一個共同的基礎,如果有可能寫一個兼容的成員函數。請注意,繼承並不意味着多態(如私有繼承)。 – Potatoswatter 2010-09-17 08:49:54