c++11 初始化列表 bind function 示例

复制代码
 1 // 111111111111.cpp: 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 #include <string>
 7 #include <vector>
 8 #include <map>
 9 
10 class FooVector {
11     std::vector<int> content_;
12 public:
13     FooVector(std::initializer_list<int> list) {
14         for (auto it = list.begin(); it != list.end(); it++) {
15             content_.push_back(*it);
16         }
17     }
18 };
19 
20 class FooMap {
21     std::map<int, int> content_;
22     using pair_t = std::map<int, int>::value_type;
23 public:
24     FooMap(std::initializer_list<pair_t> list) {
25         for (auto it = list.begin(); it != list.end(); ++it) {
26             content_.insert(*it);
27         }
28     }
29 };
30 
31 void test1() {
32     FooVector foo_1 = { 1,2,3,4,5 };
33     FooMap foo_2 = { {1,2},{3,4},{5,6} };
34 }
35 
36 void func(std::initializer_list<int> l) {
37     for (auto it = l.begin(); it != l.end(); it++) {
38         std::cout << *it << std::endl;
39     }
40 }
41 
42 void test2()
43 {
44     func({});
45     func({ 1,2,3 });
46 }
47 
48 int main()
49 {
50     test1();
51     test2();
52     return 0;
53 }
View Code
复制代码

 

复制代码
  1 // 111111111111.cpp: 定义控制台应用程序的入口点。
  2 //
  3 
  4 #include "stdafx.h"
  5 #include <iostream>
  6 #include <string>
  7 #include <vector>
  8 #include <map>
  9 #include <functional>
 10 
 11 void func(void) {
 12     std::cout << __FUNCTION__ << std::endl;
 13 }
 14 
 15 class Foo {
 16 public:
 17     static int foo_func(int a) {
 18         std::cout << __FUNCTION__ << "(" << a << ") ->:";
 19         return a;
 20     }
 21 };
 22 
 23 class Bar {
 24 public:
 25     int operator()(int a) {
 26         std::cout << __FUNCTION__ << "(" << a << ") ->: ";
 27         return a;
 28     }
 29 };
 30 
 31 void  test1()
 32 {
 33     std::function<void(void)> fr1 = func;
 34     fr1();
 35 
 36     std::function<int(int)> fr2 = Foo::foo_func;
 37     std::cout << fr2(123) << std::endl;
 38 
 39     Bar bar;
 40     fr2 = bar;
 41     std::cout << fr2(123) << std::endl;
 42 }
 43 //====================================================================
 44 class A {
 45     std::function<void()> callback_;
 46 public:
 47     A(const std::function<void()>& f) :callback_(f) {}
 48     void notify(void) {
 49         callback_();
 50     }
 51 };
 52 
 53 class Foo0 {
 54 public:
 55     void operator()(void) {
 56         std::cout << __FUNCTION__ << std::endl;
 57     }
 58 };
 59 
 60 void test2() {
 61     Foo0 foo;
 62     A aa(foo);
 63     aa.notify();
 64 }
 65 //================================================================
 66 void call_when_even(int x, const std::function<void(int)>& f) {
 67     if (!(x & 1)) {
 68         f(x);
 69     }
 70 }
 71 
 72 void output(int x) {
 73     std::cout << x << " ";
 74 }
 75 
 76 void test3() {
 77     for (int i = 0; i < 10; i++) {
 78         call_when_even(i, output);
 79     }
 80     std::cout << std::endl;
 81 }
 82 //====================================================================
 83 void output_add_2(int x) {
 84     std::cout << x + 2 << " ";
 85 }
 86 
 87 void test4() {
 88     {
 89         auto fr = std::bind(output, std::placeholders::_1);
 90         for (int i = 0; i < 10; ++i) {
 91             call_when_even(i, fr);
 92         }
 93         std::cout << std::endl;
 94     }
 95     {
 96         auto fr = std::bind(output_add_2, std::placeholders::_1);
 97         for (int i = 0; i < 10; ++i) {
 98             call_when_even(i, fr);
 99         }
100         std::cout << std::endl;
101     }
102 }
103 
104 
105 
106 
107 int main()
108 {
109     test1();
110     test2();
111     test3();
112     test4();
113     return 0;
114 }
View Code
复制代码

 

posted on   itdef  阅读(277)  评论(1编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

导航

< 2025年3月 >
23 24 25 26 27 28 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 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示