【发布时间】:2011-04-01 00:18:06
【问题描述】:
是否有一些库可以让我在 c++ 中轻松方便地创建面向对象的回调?
例如,埃菲尔语言有“代理”的概念,它或多或少像这样工作:
class Foo{
public:
Bar* bar;
Foo(){
bar = new Bar();
bar->publisher.extend(agent say(?,"Hi from Foo!", ?));
bar->invokeCallback();
}
say(string strA, string strB, int number){
print(strA + " " + strB + " " + number.out);
}
}
class Bar{
public:
ActionSequence<string, int> publisher;
Bar(){}
invokeCallback(){
publisher.call("Hi from Bar!", 3);
}
}
输出将是: 你好,来自酒吧! 3 Foo 你好!
所以 - 代理允许将成员函数封装到一个对象中,给它一些预定义的调用参数(来自 Foo 的 Hi),指定开放参数(?),并将它传递给其他可以调用它的对象稍后。
由于 c++ 不允许在非静态成员函数上创建函数指针,因此在 c++ 中实现一些易于使用的东西似乎不是那么简单。我在谷歌上找到了一些关于 C++ 中面向对象回调的文章,但是,实际上我正在寻找一些我可以简单地导入的库或头文件,它们允许我使用一些同样优雅的语法。
有人给我一些建议吗?
谢谢!
【问题讨论】:
-
我不确定我是否完全理解您的语法,但
boost::bind可用于将具有适当接口的函数和成员函数打包到对象中。 boost.org/doc/libs/1_44_0/libs/bind/… -
嘿!是的,我认为这就是我正在寻找的。不幸的是,我无法为 iPhone 编译 boost(在 iPhone 上开发)。我读到这也可能与stl有关。有人可以解释一下吗?
标签: c++ oop callback member-function-pointers eiffel