全部!
我有一些类层次结构
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::foo
和 A::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);
}
关于c++ - 如何将指针作为另一个方法参数传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670766/