我有两个类(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