如何将成员函数传递给另一个函数?

时间:2019-04-03 21:25:30

标签: c++

我有一个功能

float addXPercent (float percent, ExampleClass* A, ExampleClass B, thisFunction) {
  return (percent * B.thisFunction() + (*A).thisFunction());
}

someFunction是可以像这样同时应用于AB的功能

(*A).setSomething(0.4 * B.someFunction() + (*A).someFunction());

它采用一个percent值,例如0.4,将其应用于B.someFunction()的结果,并将该值添加到A.someFunction()的当前值。

我想做的是将函数的这一部分概括出来:

0.4 * B.someFunction() + (*A).someFunction()

进入该addXPercent函数。我希望结果看起来像这样

(*A).setSomething( addXPercent (0.3, *A, B, thisFunction) );

我对C ++还是很陌生,因此我进行了一些Google搜索,发现可以使用std标头<functional>将函数传递给其他函数。

但是我不确定如何使用这样的function< void () > thisFunction语法传递成员函数。

我应该怎么做?

我找不到相关的线程1 2(得到Sorry, there were no post results for “”),如果这是一个重复的问题,抱歉。

2 个答案:

答案 0 :(得分:0)

  

我想做的就是将这部分功能概括化

您可以使用 pointer to member function

float addXPercent (float percent, ExampleClass* A, ExampleClass B, float (ExampleClass::*someFunction)()) {
  return (percent * (B.*someFunction)() + (A->*someFunction)());
}

您可以像这样呼叫addXPercent

ExampleClass a, b;

addXPercent(0.3f, &a, b, &ExampleClass::thisFunction);

答案 1 :(得分:0)

我不确定我是否完全理解你的意图。据我所知,可以将传递的参数作为参数使用c ++ 11中的函数指针,Functor或Lambda进行归档。例如,下面有一些使用函子的方法,也许您会发现它有用。

class ExampleClass 
{
    float something;

    public:

    void setSomething(float val)
    {
        something = val;
    }

    struct ThisFunction 
    {
      float operator()(ExampleClass &example) {
        // Do whatever you need here
        float result = 2.0;
        return result;
      }
    };

};



float addXPercent (float percent, ExampleClass *A, ExampleClass B, ExampleClass::ThisFunction &thisFunction) {
  return ((percent * thisFunction(B)) + thisFunction((*A)));
}

int main() 
{
    ExampleClass A;
    ExampleClass B;

    ExampleClass::ThisFunction thisFunction;

    A.setSomething(addXPercent (0.3, &A, B, thisFunction));
};