将函数指针传递给要从类成员调用的sketch函数

时间:2018-04-01 20:56:01

标签: c++ function-pointers

class foo{
  void bar(funct pointer) {
    pointer("xxx");
  }
}

In sketch:

void setup() {
   foo(myBar);
}

void myBar(char* arg) {
}

在我的草图中,我称一个班级成员(foo)。我希望该成员在我的代码中调用一个函数(myBar)。写这个的正确和最简单的方法是什么?

1 个答案:

答案 0 :(得分:1)

即使我发现这个问题很难理解,但我认为你想使用std::function对象(C ++ 11):

#include <functional>

void bar(const std::function<void(int)>& p_func);  // Takes a functor as an argument

上面的函数包含一个函数,它返回void,并以int为参数。用法:

void aFunction(int p_index);               // Typical function

std::function<void(int)> func = aFunction; // Make it a functor
bar(func);                                 // Pass it as an argument.

bar内,您可以使用()作为参数传递的仿函数。例如:

void bar(const std::function<void(int)>& p_func)
{
    p_func(5);  // Calls the function wrapped by p_func with 5 as an argument.
}

Functors也可以在一个类中使用。请注意,仿函数与函数指针不同,但对于您的应用程序,它似乎更方便。它还允许您使用lambda表达式(C ++等效于匿名函数)