我在我的项目中使用 boost::signals2
已有一段时间了。令我遗憾的是,我仍然不明白它们是如何在幕后实现的。我的问题已经从信号的定义开始了。如何定义如
boost::signals2::signal< void (bool, double) >
处理了吗?我可以从实现细节中看出,签名变成了一个模板参数,它被恰本地命名为 Signature
。但是,我不明白语法。 C++ 标准是否允许这种语法?以这种形式提供的信号如何“存储”函数签名?
我已经尝试查看源代码,但无法找到此语法的解释。任何帮助将不胜感激。
最佳答案
是的,这种语法是允许的;它表示的类型是一个对采用bool
和double
并返回void
的函数的引用。如果我们要 typedef
它,那会很尴尬,因为名称会位于中间:
typedef void Signature(bool, double);
使用新的别名语法变得更易读:
using Signature = void(bool, double);
与函数指针并行的是:
typedef void (*Pointer)(bool, double);
using Pointer = void (*)(bool, double);
然后,使用模板技巧来梳理各种元素(提取返回类型和每个参数的类型)。
关于c++ - `boost::signals2` 中的信号签名是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558828/