C++ 将函数模板实例化为类成员并使用 "this"指针

标签 c++ templates this

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

相关文章:

c++ - 避免模​​板特化中的构造函数重复

JavaScript - 在 onclick 函数中获取(this)参数的关联值

c++ - 为什么更喜欢模板方法而不是依赖注入(inject)?

javascript - 如何存储 'this' 元素供以后使用

java - C++ this 在构造函数中?

c++ - 将结构传递给动态加载的 dll

c++ - 虚拟函数需要多少字节的额外内存?

c++ - 不同线程中的 qt 同时 MySQL 查询 = 崩溃

c++ - 如何在 C++ 中按列对多维数组进行排序?

templates - Symfony2 中的 Flash 消息似乎在我的 twig-template 中不起作用