我有一个名为 Foo 的结构,其中包含一个函数,该函数调用传递给它的任何方法并返回值。
struct Foo
{
unsigned char fooFunc(unsigned char param, unsigned char(getValueMethod)(const unsigned char))
{
return getValueMethod(param);
}
};
我有一个名为 barFunc 的方法...
static unsigned char barFunc(const unsigned char paramA)
{
return paramA * 2;
}
...可以很好地传递给 fooFunc
Foo foo1;
foo1.fooFunc(10, &barFunc);
但我也希望 fooFunc 接受成员函数,例如 bazFunc...
struct Baz
{
unsigned char bazFunc(const unsigned char paramB)
{
return paramB * 3;
}
};
...这样称呼...
Foo foo2;
Baz baz;
foo2.fooFunc(10, ?????);
...但这无效。
我发现的关于将成员函数作为参数传递的主题都谈到在调用对象之前了解该对象来自哪个类,这意味着我必须创建 2 个函数而不是一个。
有没有一种方法我还没有找到,只需要 1 个 fooFunc 方法,但支持非成员函数和成员函数?
最佳答案
拿 boost::function<signature>
通过 boost::bind()
的结果
bool free_func(std::string const& arg) { ... }
struct X {
bool mem_func(std::string const& arg) { ... }
};
...
typedef boost::function<bool (std::string const& name)> func_t;
std::vector<func_t> funcs;
X x;
funcs.push_back(boost::bind(&X::mem_func, x, _1));
funcs.push_back(boost::bind(&free_func, _1));
关于c++ - 将成员或非成员函数指针作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26177106/