0

我有以下代码:

#include <iostream>
using namespace std;

class A
{
    int m_value;
public:
    A(int value)
    {
        m_value = value;
        funcA(&A::param);
    }

    void funcA(void (A::*function)(int))
    {
        (this->*function)(m_value);
    }

    void param(int i)
    {
        cout << "i = " << i << endl;
    }
};


int main()
{
    A ob(10);

    return 0;
}

我有一个类,我在其中调用一个接收另一个函数作为参数的函数。函数调用在 line funcA(&A::param)。我想要的是能够将函数作为参数传递而无需指定类范围:funcA(&param). 另外我不想使用typedefs 这就是为什么我的代码有点“脏”。

有没有可能实现这一目标?

4

3 回答 3

0

这有点丑。

您应该考虑做的第一件事是重新编码以使用继承和动态调度。为此,您将 A 类更改为具有 funcA 调用的虚拟方法

class A {
...
    void funcA () {
       custom_function(m_value);
    }
protected:
   virtual void custom_function (int)=0;
}

现在,对于您要使用的每个不同的 custom_function,您声明一个从 A 派生的新类,并在其中实现该函数。它将自动从 funcA 调用:

class A_print : public A {
public:
    virtual void custom_function (int param) { 
       std::cout << "param was " << param << std::endl;
    }
}

如果这对您来说不够灵活,那么下一个最好的 C++-ish 解决方案是实现一个仿函数(一个充当函数的对象,甚至可能覆盖()运算符。

于 2012-08-31T15:17:59.137 回答
0

这是无法做到的。必须使用类范围(A::function)来标识类中的函数指针

于 2012-11-01T14:19:49.097 回答
-1

我不明白为什么你不能这样做:

#include <iostream>
using namespace std;

class A
{
    int m_value;
public:
    A(int value)
    {
      param(value);
    }

    void param(int i)
    {
        cout << "i = " << i << endl;
    }
};

int main()
{
    A ob(10);
    return 0;
}
于 2012-08-31T15:14:09.347 回答