C ++函数功能参数更优雅

时间:2012-08-31 15:05:20

标签: c++ class function pointers parameters

我有以下代码:

#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;
}

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

有可能实现这个目标吗?

3 个答案:

答案 0 :(得分: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 ++解决方案就是实现一个functor(一个充当函数的对象,甚至可能覆盖()运算符。

答案 1 :(得分:0)

这不可能。必须使用类作用域(A :: function)

来标识类中的函数指针

答案 2 :(得分:-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;
}