服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++用boost.signal实现多播委托

C++用boost.signal实现多播委托

2022-12-29 14:09天方 C/C++

这篇文章介绍了C++用boost.signal实现多播委托的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

boost.signal提供了一个多播委托机制,通过它可以非常容易的实现观察者模式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void print_sum(float x, float y)
{
    std::cout << "The sum is " << x+y << std::endl;
}
 
void print_product(float x, float y)
{
    std::cout << "The product is " << x*y << std::endl;
}
 
void print_difference(float x, float y)
{
    std::cout << "The difference is " << x-y << std::endl;
}
 
int main()
{
    boost::signal<void (float, float)> sig;
 
    sig.connect(print_sum);
    sig.connect(print_product);
    sig.connect(print_difference);
 
    sig(5, 3);
}

signal对象的使用方式非常简单,connect连接回调,disonnect去连接回调,()运算符执行所有回调。

连接成员函数

通过lambda表达式也可以非常容易的实现成员函数的连接:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct A
{
    int value;
    A(int value) : value(value) {}
    void Foo() { cout << "a has value of " << value << endl; }
};
 
int main()
{
    A a(123);
    boost::signal<void ()> sig;
 
    sig.connect([&]() {a.Foo();});
    sig();
}

连接带返回值的函数

signal也支持带返回值的函数,和C#一样,只返回最后一个函数的返回值。

?
1
2
3
4
5
boost::signal<int ()> sig;
sig.connect([](){ return 1; });
sig.connect([](){ return 2; });
sig.connect([](){ return 3; });
cout << sig() << endl;

异常处理

signal的异常处理机制也和c#一样:遇到异常后停止执行,抛出异常。

?
1
2
3
4
5
6
7
8
9
10
11
12
sig.connect([](){ cout << "foo 1" << endl; });
sig.connect([](){ throw std::exception("foo 2 fail"); });
sig.connect([](){ cout << "foo 3" << endl; });
 
try
{
    sig();
}
catch (std::exception& error)
{
    cout << error.what() << endl;
}

到此这篇关于C++用boost.signal实现多播委托的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/TianFang/archive/2013/02/04/2891623.html

延伸 · 阅读

精彩推荐
  • C/C++C++/C 回文字符串的实例详解

    C++/C 回文字符串的实例详解

    这篇文章主要介绍了C++ 回文字符串的实例详解的相关资料,需要的朋友可以参考下...

    wtyvhreal4412021-05-23
  • C/C++C++学校运动会管理系统的实现

    C++学校运动会管理系统的实现

    这篇文章主要为大家详细介绍了C++如何实现学校运动会管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    zzuli-dk8252021-07-02
  • C/C++C语言实现纸牌游戏(小猫钓鱼)

    C语言实现纸牌游戏(小猫钓鱼)

    这篇文章主要为大家详细介绍了C语言实现纸牌游戏,小猫钓鱼游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    齐1234062021-09-29
  • C/C++C语言中char*和char[]用法区别分析

    C语言中char*和char[]用法区别分析

    这篇文章主要介绍了C语言中char*和char[]用法区别,包括使用过程中的误区及注意点分析,需要的朋友可以参考下...

    C语言程序设计9812021-02-02
  • C/C++C语言模式实现C++继承和多态的实例代码

    C语言模式实现C++继承和多态的实例代码

    本篇文章主要介绍了C语言模式实现C++继承和多态的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    name_文强10862021-05-26
  • C/C++C++队列用法实例

    C++队列用法实例

    这篇文章主要介绍了C++队列用法,实例分析了C++实现队列的入队、出队、读取与判断等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    G05614062021-03-02
  • C/C++C语言system 自动关机函数代码

    C语言system 自动关机函数代码

    这篇文章主要介绍了C语言system 自动关机函数代码,需要的朋友可以参考下...

    C语言教程网4542021-03-31
  • C/C++C++基于栈的深搜算法实现马踏棋盘

    C++基于栈的深搜算法实现马踏棋盘

    这篇文章主要为大家详细介绍了C++基于栈的深搜算法实现马踏棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    coder_vivid4872022-09-22