c++ - 如何将指针作为另一个方法参数传递给方法

标签 c++ c++11 pointer-to-member

全部!

我有一些类层次结构

class A {public: virtual void foo(int, T*) = 0; virtual void foo1(int, T*) = 0;};
class B : public A {public: void foo(int, T*) override; void foo1(int, T*) override;};
class C : public B {public: void foo(int, T*) override; void foo1(int, T*) override;};

在客户端代码中

class D{void client_foo(A* pA, bool, T*);};
void D::client_foo(A* pA, bool b, T* pT)
{
    if (b) pA->foo(1050, pT);
    else pA->foo1(5010, pT);
}

我想引入新函数void D::client_helper(???),它将实现pA、int value、pT 和指向要调用的 A 类 方法的指针。 所以,D::client_foo(...) 可以重写为:

void D::client_foo(A* pA, bool b, T* pT)
{
    if (b) client_helper(pA, 1050, pT, std::mem_fn(&A::foo));
    else client_helper(pA, 5010, pT, std::mem_fn(&A::foo1));
}

问题是:D::client_helper() 应该有什么签名?

最佳答案

由于 A::fooA::foo1 具有相同的签名,因此不需要 std::mem_fn,或者另一个抽象,只是让 client_helper 将一个普通指针指向 A 的成员函数。

void client_helper(A* pA, int i, T* pT, void(A::*memfn)(int, T*))
{
    (pA->*memfn)(i, pT);
}

并称它为

void client_foo(A* pA, bool b, T* pT)
{
    if (b) client_helper(pA, 1050, pT, &A::foo);
    else client_helper(pA, 5010, pT, &A::foo1);
}

Live demo

关于c++ - 如何将指针作为另一个方法参数传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670766/

相关文章:

c++ - ORPG引擎开发,构建代码(C++,2D)

c++ - 带有 lambda 自定义删除器的 std::unique_ptr 无法编译

c++ - 如何最好地将方法传递给同一类的方法

c++ - 将派生虚拟覆盖转换为基础纯虚拟成员

c++ - 如何将成员函数模板作为模板参数传递?

c++ - 错误启动过程。无法创建 pty - Mac 上的 Eclipse

c++ - 如何在此C++ lambda表达式中采用局部变量?

c++11 - std::move-如何警告程序员不要使用* move 自*对象

c++ - 头文件中的 constexpr const char*

c++ - Linux 串行读取 block minicom