我有两个类(ClassA 和 ClassB),它们都有两种方法(比较和收敛)。这些方法的工作方式完全相同,但这些类在多态方面并不相关(有充分的理由)。我想定义一个函数模板,这两个类都可以显式实例化为成员,但我收到错误,因为这些方法使用“this”,当我将它们转换为模板时,编译器会抛出错误,因为它们不是成员函数。
因为那个限制这是不可能的吗?或者是否有某种方法可以在未声明为模板类一部分的函数模板中使用“this”。我做了一些研究,但一无所获。
逻辑.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
}
A类.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 类似。
感谢任何帮助!
最佳答案
我相信你可以使用 CRTP这里。这是一个示例,您可以省略 friend
声明,以防您可以仅使用公共(public)成员进行比较:
template<class T>
class comparer
{
public:
T* compare(const T& t)
{
//Use this pointer
bool b = static_cast<T*>(this)->m_b == t.m_b;
return NULL;
}
};
class A : public comparer<A>
{
public:
friend class comparer<A>;
A() : m_b(0)
{
}
private:
int m_b;
};
class B : public comparer<B>
{
public:
friend class comparer<B>;
B() : m_b(0)
{
}
private:
int m_b;
};
int main()
{
A a1,a2;
A* p = a1.compare(a2);
B b1,b2;
B* p1 = b1.compare(b2);
return 0;
}
关于C++ 将函数模板实例化为类成员并使用 "this"指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3733636/