gpt4 book ai didi

c++ - 传递函数

转载 作者:行者123 更新时间:2023-11-27 22:30:03 25 4
gpt4 key购买 nike

好的,我已经有一段时间没有用 C++ 编写了。而且我从来没有在这么高的水平上安静地做过任何事情。

所以基本上我需要创建一个类。该类的构造函数需要引用(或指针)到另一个类的方法或函数。

基本上我有一个类需要偶尔从 fltk 赋值器(版本 1.1.x)读取一个值,然后更改一些关于它自己的东西。每个对象都会有自己的关联赋值器。(他们也有一个链接到同一个父对象的另一个对象,在从评估者更新他们自己之后会告诉更新,等等)

那么我如何在构造函数中传递函数?

最佳答案

下面是一个示例,其中 Foo 的方法被传递给 Bar 构造函数,然后在给定的 Bar 对象上调用:

struct Foo
{
int z;

int add(int x, int y)
{
return x + y + z;
}

int mul(int x, int y)
{
return x * y * z;
}
};

typedef int (Foo::*foo_method)(int, int);

struct Bar
{
foo_method m;

Bar(foo_method m) : m(m) {}

int call_on(Foo* foo)
{
return (foo->*m)(4, 2);
}
};

int main()
{
Bar bar(&Foo::add);

Foo foo = { 123 };
bar.call_on(&foo);
}

另一方面,如果您在 Bar 构造时已经知道 Foo 对象,那么 Bar 并不真正关心哪个类该方法属于。它所需要的只是一个稍后调用的仿函数,Foo 对象可以简单地由客户端绑定(bind)。

#include <functional>

struct Bar
{
std::function<int (int, int)> f;

Bar(std::function<int (int, int)> f) : f(f) {}

int call()
{
return f(4, 2);
}
};

using namespace std::placeholders;

int main()
{
Foo foo = { 123 };
Bar bar(std::bind(&Foo::add, &foo, _1, _2));

bar.call();
}

如果您没有 C++0x 编译器,请将 std::bind 替换为 std::tr1::bindboost::绑定(bind)

关于c++ - 传递函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com