【发布时间】:2011-05-13 15:19:51
【问题描述】:
我正在编写一些使用libsigc++ 发送信号(事件)的 C++ 代码。
我对 C++ 很陌生,我倾向于用 C# 来思考。我在 C# 中想要的等效代码类似于:
var names = new List<string>();
thing.Happened += (string name) => names.Add(name);
thing.DoStuff();
libsigc++ tutorials 很好地展示了如何将函数或成员绑定到信号,但我不想为这样一个真正应该私有封装的简单方法定义新的类级方法它的客户,至少在我看来。
libsigc++ API 似乎支持 lambda 表达式,但我还没有找到任何示例来说明如何使用它们。有人可以帮我吗?请记住,我是 C++ 新手!
【问题讨论】:
-
在最近接受的 C++0x 标准之前,C++ 不支持 lambda。而且 C++0X 太新了,我怀疑 libsigc++ 的编写方式是为了利用新的 lambdas
-
@aneccodeal,在this page 上,API 中有很多对术语
lambda的引用。他们实际上指的是别的东西吗?这对我来说有点胡言乱语,真的。 -
看起来这是一个模板结构,他们定义的不是 C++0x lambda 函数。
-
@aneccodeal:C++0x lambda 可以在任何可以使用函数对象的地方使用。函数对象已经存在了一段时间。如果您编写的代码接受函数对象参数,则无需进行任何更改即可接受 lambda。
-
我应该说,“如果您编写的代码接受任意函数对象参数*,也就是函数模板。如果您的函数只接受特定类的函数对象,它不会接受 lambda 作为替代品。
标签: c++ events signals libsigc++