c++ - 将成员或非成员函数指针作为参数传递

标签 c++ pointer-to-member non-member-functions

我有一个名为 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/

相关文章:

c++ - 如何使类模板参数可选?

c++ - C++中的OpenCV图像数据类型转换

c++ - 类范围和私有(private)成员?

c++ - 类复制构造函数和指向成员函数的指针

C++ 指向使用模板的非静态成员函数的指针

C++静态非成员函数返回模板类的对象

c++ - 通过使它们成为自由函数来对私有(private)方法进行单元测试

指向重写方法的 C++ 方法指针

c++ - 可以在 c++17 的聚合初始化中执行复制省略吗?

C++:通过基类中定义的函数指针从派生调用函数