gpt4 book ai didi

c++ - `boost::signals2` 中的信号签名是如何实现的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:50 26 4
gpt4 key购买 nike

我在我的项目中使用 boost::signals2 已有一段时间了。令我遗憾的是,我仍然不明白它们是如何在幕后实现的。我的问题已经从信号的定义开始了。如何定义如

boost::signals2::signal< void (bool, double) > 

处理了吗?我可以从实现细节中看出,签名变成了一个模板参数,它被恰本地命名为 Signature。但是,我不明白语法。 C++ 标准是否允许这种语法?以这种形式提供的信号如何“存储”函数签名?

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

最佳答案

是的,这种语法是允许的;它表示的类型是一个对采用booldouble 并返回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/

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