如何实现`boost :: signals2`中的信号签名?

Gno*_*lon 6 c++ implementation templates boost boost-signals2

我已经boost::signals2在我的项目中使用了一段时间.令我感到羞耻的是,我仍然不明白它们是如何在引擎盖下实现的.我的问题已经从信号的定义开始了.如何定义如

boost::signals2::signal< void (bool, double) > 
Run Code Online (Sandbox Code Playgroud)

如何处理?我可以从实现细节中看到签名成为一个适当命名的模板参数Signature.但是,我不懂语法.C++标准是否允许这种语法?如果以这种形式提供功能签名,信号如何"存储"?

我已经尝试查看源代码,但无法找到此语法的解释.任何帮助,将不胜感激.

Mat*_* M. 2

是的,这种语法是允许的;它表示的类型是对采用 a和返回 的函数的引用booldoublevoid。如果我们这样做typedef,那就很尴尬了,因为名字会坐在中间:

typedef void Signature(bool, double);
Run Code Online (Sandbox Code Playgroud)

使用新的别名语法变得更具可读性:

using Signature = void(bool, double);
Run Code Online (Sandbox Code Playgroud)

与函数指针的相似之处是:

typedef void (*Pointer)(bool, double);

using Pointer = void (*)(bool, double);
Run Code Online (Sandbox Code Playgroud)

之后,有模板技巧来梳理各种元素(提取返回类型和每个参数的类型)。