我有一个功能
float addXPercent (float percent, ExampleClass* A, ExampleClass B, thisFunction) {
return (percent * B.thisFunction() + (*A).thisFunction());
}
和someFunction
是可以像这样同时应用于A
和B
的功能
(*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 “”
),如果这是一个重复的问题,抱歉。
答案 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));
};