[{"data":1,"prerenderedAt":3038},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function":3,"wiki-doc-items-2023-10-05-cplusplus-jiao-xue":2478,"wiki:author-members":3026},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":189,"chapterOrder":2466,"date":2467,"description":182,"docKey":2468,"docRoot":2469,"docTitle":2470,"extension":2471,"isWikiDoc":211,"isWikiIndex":2472,"meta":2473,"navigation":211,"path":2474,"seo":2475,"stem":2476,"wikiDepth":189,"__hash__":2477},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function.md","std::function",[7],"董佳辉",{"type":9,"value":10,"toc":2448},"minimark",[11,15,19,35,38,44,47,53,67,71,80,83,168,171,176,706,713,721,725,735,1148,1152,1158,1162,1168,1570,1574,1580,1603,1607,1617,1974,1978,1984,1988,1993,2190,2194,2200,2203,2292,2296,2302,2350,2353,2390,2393,2417,2420,2444],[12,13,14],"h2",{"id":14},"本节解决什么问题",[16,17,18],"p",{},"普通函数、函数指针、Lambda、函数对象都可以\"被调用\"，它们统称为可调用对象。但它们的具体类型并不一样：",[20,21,22,26,29,32],"ul",{},[23,24,25],"li",{},"普通函数有函数类型。",[23,27,28],{},"函数指针是指针类型。",[23,30,31],{},"每个 Lambda 都有编译器生成的独立类型。",[23,33,34],{},"函数对象是自定义类类型。",[16,36,37],{},"如果你只是立刻调用一次，类型不同通常不是问题；但如果你要把回调保存到成员变量里，或者把多个不同回调放进同一个容器里，就需要一个统一类型。",[16,39,40,43],{},[41,42,5],"code",{}," 就是标准库提供的通用可调用对象包装器。",[12,45,46],{"id":46},"这个特性是什么",[16,48,49,52],{},[41,50,51],{},"std::function\u003C返回值(参数列表)>"," 可以保存任何签名匹配的可调用对象。",[16,54,55,56,59,60,63,64,66],{},"例如 ",[41,57,58],{},"std::function\u003Cint(int, int)>"," 表示：保存一个可以用两个 ",[41,61,62],{},"int"," 调用，并返回 ",[41,65,62],{}," 的可调用对象。",[12,68,70],{"id":69},"c-标准版本","C++ 标准版本",[16,72,73,75,76,79],{},[41,74,5],{}," 从 C++11 开始提供，需要头文件 ",[41,77,78],{},"\u003Cfunctional>","。",[12,81,82],{"id":82},"常见场景",[84,85,86,105],"table",{},[87,88,89],"thead",{},[90,91,92,97,102],"tr",{},[93,94,96],"th",{"align":95},"left","场景",[93,98,99,100],{"align":95},"是否适合 ",[41,101,5],{},[93,103,104],{"align":95},"原因",[106,107,108,120,131,144,157],"tbody",{},[90,109,110,114,117],{},[111,112,113],"td",{"align":95},"函数里立刻调用一次回调",[111,115,116],{"align":95},"不一定",[111,118,119],{"align":95},"模板参数通常更轻量",[90,121,122,125,128],{},[111,123,124],{"align":95},"类成员变量保存一个回调",[111,126,127],{"align":95},"适合",[111,129,130],{"align":95},"成员变量需要稳定类型",[90,132,133,139,141],{},[111,134,135,138],{"align":95},[41,136,137],{},"vector"," 保存多个不同 lambda",[111,140,127],{"align":95},[111,142,143],{"align":95},"容器元素必须是同一种类型",[90,145,146,149,152],{},[111,147,148],{"align":95},"高频性能热点里的小函数",[111,150,151],{"align":95},"谨慎",[111,153,154,156],{"align":95},[41,155,5],{}," 有类型擦除开销",[90,158,159,162,165],{},[111,160,161],{"align":95},"只保存无捕获函数",[111,163,164],{"align":95},"函数指针也可以",[111,166,167],{"align":95},"但函数指针不能保存有捕获 lambda",[12,169,170],{"id":170},"示例代码",[172,173,175],"h3",{"id":174},"示例-1统一保存不同类型的可调用对象","示例 1：统一保存不同类型的可调用对象",[177,178,183],"pre",{"className":179,"code":180,"language":181,"meta":182,"style":182},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Cfunctional>\n#include \u003Ciostream>\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\nstruct Multiply\n{\n    int operator()(int a, int b) const\n    {\n        return a * b;\n    }\n};\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    \u002F\u002F std::function 可以保存普通函数、lambda 或函数对象。\n    std::function\u003Cint(int, int)> op;\n\n    op = add;\n    std::cout \u003C\u003C \"add: \" \u003C\u003C op(3, 4) \u003C\u003C \"\\n\";\n\n    int (*function_pointer)(int, int) = add;\n    op = function_pointer;\n    std::cout \u003C\u003C \"function pointer: \" \u003C\u003C op(5, 6) \u003C\u003C \"\\n\";\n\n    op = [](int a, int b) {\n        return a - b;\n    };\n    std::cout \u003C\u003C \"lambda: \" \u003C\u003C op(10, 3) \u003C\u003C \"\\n\";\n\n    op = Multiply{};\n    std::cout \u003C\u003C \"function object: \" \u003C\u003C op(7, 8) \u003C\u003C \"\\n\";\n\n    return 0;\n}\n","cpp","",[41,184,185,198,206,213,243,249,264,270,275,284,289,319,325,338,344,350,355,366,371,378,384,413,418,430,477,482,502,512,550,555,578,590,596,633,638,648,686,691,701],{"__ignoreMap":182},[186,187,190,194],"span",{"class":188,"line":189},"line",1,[186,191,193],{"class":192},"szBVR","#include",[186,195,197],{"class":196},"sZZnC"," \u003Cfunctional>\n",[186,199,201,203],{"class":188,"line":200},2,[186,202,193],{"class":192},[186,204,205],{"class":196}," \u003Ciostream>\n",[186,207,209],{"class":188,"line":208},3,[186,210,212],{"emptyLinePlaceholder":211},true,"\n",[186,214,216,218,222,226,228,232,235,237,240],{"class":188,"line":215},4,[186,217,62],{"class":192},[186,219,221],{"class":220},"sScJk"," add",[186,223,225],{"class":224},"sVt8B","(",[186,227,62],{"class":192},[186,229,231],{"class":230},"s4XuR"," a",[186,233,234],{"class":224},", ",[186,236,62],{"class":192},[186,238,239],{"class":230}," b",[186,241,242],{"class":224},")\n",[186,244,246],{"class":188,"line":245},5,[186,247,248],{"class":224},"{\n",[186,250,252,255,258,261],{"class":188,"line":251},6,[186,253,254],{"class":192},"    return",[186,256,257],{"class":224}," a ",[186,259,260],{"class":192},"+",[186,262,263],{"class":224}," b;\n",[186,265,267],{"class":188,"line":266},7,[186,268,269],{"class":224},"}\n",[186,271,273],{"class":188,"line":272},8,[186,274,212],{"emptyLinePlaceholder":211},[186,276,278,281],{"class":188,"line":277},9,[186,279,280],{"class":192},"struct",[186,282,283],{"class":220}," Multiply\n",[186,285,287],{"class":188,"line":286},10,[186,288,248],{"class":224},[186,290,292,295,298,301,303,305,307,309,311,313,316],{"class":188,"line":291},11,[186,293,294],{"class":192},"    int",[186,296,297],{"class":192}," operator",[186,299,300],{"class":220},"()",[186,302,225],{"class":224},[186,304,62],{"class":192},[186,306,231],{"class":230},[186,308,234],{"class":224},[186,310,62],{"class":192},[186,312,239],{"class":230},[186,314,315],{"class":224},") ",[186,317,318],{"class":192},"const\n",[186,320,322],{"class":188,"line":321},12,[186,323,324],{"class":224},"    {\n",[186,326,328,331,333,336],{"class":188,"line":327},13,[186,329,330],{"class":192},"        return",[186,332,257],{"class":224},[186,334,335],{"class":192},"*",[186,337,263],{"class":224},[186,339,341],{"class":188,"line":340},14,[186,342,343],{"class":224},"    }\n",[186,345,347],{"class":188,"line":346},15,[186,348,349],{"class":224},"};\n",[186,351,353],{"class":188,"line":352},16,[186,354,212],{"emptyLinePlaceholder":211},[186,356,358,360,363],{"class":188,"line":357},17,[186,359,62],{"class":192},[186,361,362],{"class":220}," main",[186,364,365],{"class":224},"()\n",[186,367,369],{"class":188,"line":368},18,[186,370,248],{"class":224},[186,372,374],{"class":188,"line":373},19,[186,375,377],{"class":376},"sJ8bj","    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[186,379,381],{"class":188,"line":380},20,[186,382,383],{"class":376},"    \u002F\u002F std::function 可以保存普通函数、lambda 或函数对象。\n",[186,385,387,390,393,396,398,400,402,404,407,410],{"class":188,"line":386},21,[186,388,389],{"class":220},"    std",[186,391,392],{"class":224},"::function",[186,394,395],{"class":192},"\u003Cint",[186,397,225],{"class":224},[186,399,62],{"class":192},[186,401,234],{"class":224},[186,403,62],{"class":192},[186,405,406],{"class":224},")",[186,408,409],{"class":192},">",[186,411,412],{"class":224}," op;\n",[186,414,416],{"class":188,"line":415},22,[186,417,212],{"emptyLinePlaceholder":211},[186,419,421,424,427],{"class":188,"line":420},23,[186,422,423],{"class":224},"    op ",[186,425,426],{"class":192},"=",[186,428,429],{"class":224}," add;\n",[186,431,433,435,438,441,444,447,450,452,456,458,461,463,465,468,471,474],{"class":188,"line":432},24,[186,434,389],{"class":220},[186,436,437],{"class":224},"::cout ",[186,439,440],{"class":192},"\u003C\u003C",[186,442,443],{"class":196}," \"add: \"",[186,445,446],{"class":192}," \u003C\u003C",[186,448,449],{"class":220}," op",[186,451,225],{"class":224},[186,453,455],{"class":454},"sj4cs","3",[186,457,234],{"class":224},[186,459,460],{"class":454},"4",[186,462,315],{"class":224},[186,464,440],{"class":192},[186,466,467],{"class":196}," \"",[186,469,470],{"class":454},"\\n",[186,472,473],{"class":196},"\"",[186,475,476],{"class":224},";\n",[186,478,480],{"class":188,"line":479},25,[186,481,212],{"emptyLinePlaceholder":211},[186,483,485,487,490,492,494,496,498,500],{"class":188,"line":484},26,[186,486,294],{"class":192},[186,488,489],{"class":224}," (*function_pointer)(",[186,491,62],{"class":192},[186,493,234],{"class":224},[186,495,62],{"class":192},[186,497,315],{"class":224},[186,499,426],{"class":192},[186,501,429],{"class":224},[186,503,505,507,509],{"class":188,"line":504},27,[186,506,423],{"class":224},[186,508,426],{"class":192},[186,510,511],{"class":224}," function_pointer;\n",[186,513,515,517,519,521,524,526,528,530,533,535,538,540,542,544,546,548],{"class":188,"line":514},28,[186,516,389],{"class":220},[186,518,437],{"class":224},[186,520,440],{"class":192},[186,522,523],{"class":196}," \"function pointer: \"",[186,525,446],{"class":192},[186,527,449],{"class":220},[186,529,225],{"class":224},[186,531,532],{"class":454},"5",[186,534,234],{"class":224},[186,536,537],{"class":454},"6",[186,539,315],{"class":224},[186,541,440],{"class":192},[186,543,467],{"class":196},[186,545,470],{"class":454},[186,547,473],{"class":196},[186,549,476],{"class":224},[186,551,553],{"class":188,"line":552},29,[186,554,212],{"emptyLinePlaceholder":211},[186,556,558,560,562,565,567,569,571,573,575],{"class":188,"line":557},30,[186,559,423],{"class":224},[186,561,426],{"class":192},[186,563,564],{"class":224}," [](",[186,566,62],{"class":192},[186,568,231],{"class":230},[186,570,234],{"class":224},[186,572,62],{"class":192},[186,574,239],{"class":230},[186,576,577],{"class":224},") {\n",[186,579,581,583,585,588],{"class":188,"line":580},31,[186,582,330],{"class":192},[186,584,257],{"class":224},[186,586,587],{"class":192},"-",[186,589,263],{"class":224},[186,591,593],{"class":188,"line":592},32,[186,594,595],{"class":224},"    };\n",[186,597,599,601,603,605,608,610,612,614,617,619,621,623,625,627,629,631],{"class":188,"line":598},33,[186,600,389],{"class":220},[186,602,437],{"class":224},[186,604,440],{"class":192},[186,606,607],{"class":196}," \"lambda: \"",[186,609,446],{"class":192},[186,611,449],{"class":220},[186,613,225],{"class":224},[186,615,616],{"class":454},"10",[186,618,234],{"class":224},[186,620,455],{"class":454},[186,622,315],{"class":224},[186,624,440],{"class":192},[186,626,467],{"class":196},[186,628,470],{"class":454},[186,630,473],{"class":196},[186,632,476],{"class":224},[186,634,636],{"class":188,"line":635},34,[186,637,212],{"emptyLinePlaceholder":211},[186,639,641,643,645],{"class":188,"line":640},35,[186,642,423],{"class":224},[186,644,426],{"class":192},[186,646,647],{"class":224}," Multiply{};\n",[186,649,651,653,655,657,660,662,664,666,669,671,674,676,678,680,682,684],{"class":188,"line":650},36,[186,652,389],{"class":220},[186,654,437],{"class":224},[186,656,440],{"class":192},[186,658,659],{"class":196}," \"function object: \"",[186,661,446],{"class":192},[186,663,449],{"class":220},[186,665,225],{"class":224},[186,667,668],{"class":454},"7",[186,670,234],{"class":224},[186,672,673],{"class":454},"8",[186,675,315],{"class":224},[186,677,440],{"class":192},[186,679,467],{"class":196},[186,681,470],{"class":454},[186,683,473],{"class":196},[186,685,476],{"class":224},[186,687,689],{"class":188,"line":688},37,[186,690,212],{"emptyLinePlaceholder":211},[186,692,694,696,699],{"class":188,"line":693},38,[186,695,254],{"class":192},[186,697,698],{"class":454}," 0",[186,700,476],{"class":224},[186,702,704],{"class":188,"line":703},39,[186,705,269],{"class":224},[16,707,708,712],{},[709,710,711],"strong",{},"运行结果","：",[177,714,719],{"className":715,"code":717,"language":718,"meta":182},[716],"language-text","add: 7\nfunction pointer: 11\nlambda: 7\nfunction object: 56\n","text",[41,720,717],{"__ignoreMap":182},[172,722,724],{"id":723},"示例-2把-stdfunction-作为参数传递回调","示例 2：把 std::function 作为参数传递回调",[16,726,727,728,731,732,79],{},"这个例子中，",[41,729,730],{},"calculate"," 不关心具体传进来的是普通函数还是 lambda，只要求签名是 ",[41,733,734],{},"int(int, int)",[177,736,738],{"className":179,"code":737,"language":181,"meta":182,"style":182},"#include \u003Cfunctional>\n#include \u003Ciostream>\n\nint add(int a, int b)\n{\n    return a + b;\n}\n\n\u002F\u002F std::function 可以保存普通函数、lambda 或函数对象。\nint calculate(int a, int b, const std::function\u003Cint(int, int)>& op)\n{\n    return op(a, b);\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    int x = 10;\n    int y = 5;\n\n    int r1 = calculate(x, y, add);\n    std::cout \u003C\u003C \"add result = \" \u003C\u003C r1 \u003C\u003C \"\\n\";\n\n    int r2 = calculate(x, y, [](int a, int b) {\n        return a * b;\n    });\n    std::cout \u003C\u003C \"multiply result = \" \u003C\u003C r2 \u003C\u003C \"\\n\";\n\n    int offset = 100;\n    int r3 = calculate(x, y, [offset](int a, int b) {\n        return a + b + offset;\n    });\n    std::cout \u003C\u003C \"with offset result = \" \u003C\u003C r3 \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[41,739,740,746,752,756,776,780,790,794,798,803,859,863,872,876,880,888,892,896,910,924,928,942,967,971,997,1007,1012,1037,1041,1055,1087,1103,1107,1132,1136,1144],{"__ignoreMap":182},[186,741,742,744],{"class":188,"line":189},[186,743,193],{"class":192},[186,745,197],{"class":196},[186,747,748,750],{"class":188,"line":200},[186,749,193],{"class":192},[186,751,205],{"class":196},[186,753,754],{"class":188,"line":208},[186,755,212],{"emptyLinePlaceholder":211},[186,757,758,760,762,764,766,768,770,772,774],{"class":188,"line":215},[186,759,62],{"class":192},[186,761,221],{"class":220},[186,763,225],{"class":224},[186,765,62],{"class":192},[186,767,231],{"class":230},[186,769,234],{"class":224},[186,771,62],{"class":192},[186,773,239],{"class":230},[186,775,242],{"class":224},[186,777,778],{"class":188,"line":245},[186,779,248],{"class":224},[186,781,782,784,786,788],{"class":188,"line":251},[186,783,254],{"class":192},[186,785,257],{"class":224},[186,787,260],{"class":192},[186,789,263],{"class":224},[186,791,792],{"class":188,"line":266},[186,793,269],{"class":224},[186,795,796],{"class":188,"line":272},[186,797,212],{"emptyLinePlaceholder":211},[186,799,800],{"class":188,"line":277},[186,801,802],{"class":376},"\u002F\u002F std::function 可以保存普通函数、lambda 或函数对象。\n",[186,804,805,807,810,812,814,816,818,820,822,824,827,830,833,836,839,841,843,845,847,849,852,855,857],{"class":188,"line":286},[186,806,62],{"class":192},[186,808,809],{"class":220}," calculate",[186,811,225],{"class":224},[186,813,62],{"class":192},[186,815,231],{"class":230},[186,817,234],{"class":224},[186,819,62],{"class":192},[186,821,239],{"class":230},[186,823,234],{"class":224},[186,825,826],{"class":192},"const",[186,828,829],{"class":220}," std",[186,831,832],{"class":224},"::",[186,834,835],{"class":220},"function",[186,837,838],{"class":224},"\u003C",[186,840,62],{"class":192},[186,842,225],{"class":224},[186,844,62],{"class":192},[186,846,234],{"class":224},[186,848,62],{"class":192},[186,850,851],{"class":224},")>",[186,853,854],{"class":192},"&",[186,856,449],{"class":230},[186,858,242],{"class":224},[186,860,861],{"class":188,"line":291},[186,862,248],{"class":224},[186,864,865,867,869],{"class":188,"line":321},[186,866,254],{"class":192},[186,868,449],{"class":220},[186,870,871],{"class":224},"(a, b);\n",[186,873,874],{"class":188,"line":327},[186,875,269],{"class":224},[186,877,878],{"class":188,"line":340},[186,879,212],{"emptyLinePlaceholder":211},[186,881,882,884,886],{"class":188,"line":346},[186,883,62],{"class":192},[186,885,362],{"class":220},[186,887,365],{"class":224},[186,889,890],{"class":188,"line":352},[186,891,248],{"class":224},[186,893,894],{"class":188,"line":357},[186,895,377],{"class":376},[186,897,898,900,903,905,908],{"class":188,"line":368},[186,899,294],{"class":192},[186,901,902],{"class":224}," x ",[186,904,426],{"class":192},[186,906,907],{"class":454}," 10",[186,909,476],{"class":224},[186,911,912,914,917,919,922],{"class":188,"line":373},[186,913,294],{"class":192},[186,915,916],{"class":224}," y ",[186,918,426],{"class":192},[186,920,921],{"class":454}," 5",[186,923,476],{"class":224},[186,925,926],{"class":188,"line":380},[186,927,212],{"emptyLinePlaceholder":211},[186,929,930,932,935,937,939],{"class":188,"line":386},[186,931,294],{"class":192},[186,933,934],{"class":224}," r1 ",[186,936,426],{"class":192},[186,938,809],{"class":220},[186,940,941],{"class":224},"(x, y, add);\n",[186,943,944,946,948,950,953,955,957,959,961,963,965],{"class":188,"line":415},[186,945,389],{"class":220},[186,947,437],{"class":224},[186,949,440],{"class":192},[186,951,952],{"class":196}," \"add result = \"",[186,954,446],{"class":192},[186,956,934],{"class":224},[186,958,440],{"class":192},[186,960,467],{"class":196},[186,962,470],{"class":454},[186,964,473],{"class":196},[186,966,476],{"class":224},[186,968,969],{"class":188,"line":420},[186,970,212],{"emptyLinePlaceholder":211},[186,972,973,975,978,980,982,985,987,989,991,993,995],{"class":188,"line":432},[186,974,294],{"class":192},[186,976,977],{"class":224}," r2 ",[186,979,426],{"class":192},[186,981,809],{"class":220},[186,983,984],{"class":224},"(x, y, [](",[186,986,62],{"class":192},[186,988,231],{"class":230},[186,990,234],{"class":224},[186,992,62],{"class":192},[186,994,239],{"class":230},[186,996,577],{"class":224},[186,998,999,1001,1003,1005],{"class":188,"line":479},[186,1000,330],{"class":192},[186,1002,257],{"class":224},[186,1004,335],{"class":192},[186,1006,263],{"class":224},[186,1008,1009],{"class":188,"line":484},[186,1010,1011],{"class":224},"    });\n",[186,1013,1014,1016,1018,1020,1023,1025,1027,1029,1031,1033,1035],{"class":188,"line":504},[186,1015,389],{"class":220},[186,1017,437],{"class":224},[186,1019,440],{"class":192},[186,1021,1022],{"class":196}," \"multiply result = \"",[186,1024,446],{"class":192},[186,1026,977],{"class":224},[186,1028,440],{"class":192},[186,1030,467],{"class":196},[186,1032,470],{"class":454},[186,1034,473],{"class":196},[186,1036,476],{"class":224},[186,1038,1039],{"class":188,"line":514},[186,1040,212],{"emptyLinePlaceholder":211},[186,1042,1043,1045,1048,1050,1053],{"class":188,"line":552},[186,1044,294],{"class":192},[186,1046,1047],{"class":224}," offset ",[186,1049,426],{"class":192},[186,1051,1052],{"class":454}," 100",[186,1054,476],{"class":224},[186,1056,1057,1059,1062,1064,1066,1069,1072,1075,1077,1079,1081,1083,1085],{"class":188,"line":557},[186,1058,294],{"class":192},[186,1060,1061],{"class":224}," r3 ",[186,1063,426],{"class":192},[186,1065,809],{"class":220},[186,1067,1068],{"class":224},"(x, y, [",[186,1070,1071],{"class":230},"offset",[186,1073,1074],{"class":224},"](",[186,1076,62],{"class":192},[186,1078,231],{"class":230},[186,1080,234],{"class":224},[186,1082,62],{"class":192},[186,1084,239],{"class":230},[186,1086,577],{"class":224},[186,1088,1089,1091,1093,1095,1098,1100],{"class":188,"line":580},[186,1090,330],{"class":192},[186,1092,257],{"class":224},[186,1094,260],{"class":192},[186,1096,1097],{"class":224}," b ",[186,1099,260],{"class":192},[186,1101,1102],{"class":224}," offset;\n",[186,1104,1105],{"class":188,"line":592},[186,1106,1011],{"class":224},[186,1108,1109,1111,1113,1115,1118,1120,1122,1124,1126,1128,1130],{"class":188,"line":598},[186,1110,389],{"class":220},[186,1112,437],{"class":224},[186,1114,440],{"class":192},[186,1116,1117],{"class":196}," \"with offset result = \"",[186,1119,446],{"class":192},[186,1121,1061],{"class":224},[186,1123,440],{"class":192},[186,1125,467],{"class":196},[186,1127,470],{"class":454},[186,1129,473],{"class":196},[186,1131,476],{"class":224},[186,1133,1134],{"class":188,"line":635},[186,1135,212],{"emptyLinePlaceholder":211},[186,1137,1138,1140,1142],{"class":188,"line":640},[186,1139,254],{"class":192},[186,1141,698],{"class":454},[186,1143,476],{"class":224},[186,1145,1146],{"class":188,"line":650},[186,1147,269],{"class":224},[16,1149,1150,712],{},[709,1151,711],{},[177,1153,1156],{"className":1154,"code":1155,"language":718,"meta":182},[716],"add result = 15\nmultiply result = 50\nwith offset result = 115\n",[41,1157,1155],{"__ignoreMap":182},[172,1159,1161],{"id":1160},"示例-3把回调保存到类成员变量","示例 3：把回调保存到类成员变量",[16,1163,1164,1165,1167],{},"函数指针不能保存有捕获的 lambda；",[41,1166,5],{}," 可以，所以它非常适合保存事件回调。",[177,1169,1171],{"className":179,"code":1170,"language":181,"meta":182,"style":182},"#include \u003Cfunctional>\n#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Cutility>\n\nclass Button\n{\n    \u002F\u002F std::function 可以保存普通函数、lambda 或函数对象。\n    std::function\u003Cvoid()> on_click_;\n\npublic:\n    void set_on_click(std::function\u003Cvoid()> callback)\n    {\n        on_click_ = std::move(callback);\n    }\n\n    void click() const\n    {\n        if (on_click_)\n        {\n            on_click_();\n        }\n        else\n        {\n            std::cout \u003C\u003C \"no callback\\n\";\n        }\n    }\n};\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    Button button;\n\n    button.click();\n\n    std::string name = \"Save\";\n    int count = 0;\n\n    button.set_on_click([name, &count]() {\n        ++count;\n        std::cout \u003C\u003C name \u003C\u003C \" clicked, count = \" \u003C\u003C count \u003C\u003C \"\\n\";\n    });\n\n    button.click();\n    button.click();\n\n    return 0;\n}\n",[41,1172,1173,1179,1185,1192,1199,1203,1211,1215,1219,1235,1239,1244,1274,1278,1295,1299,1303,1315,1319,1327,1332,1340,1345,1350,1354,1372,1376,1380,1384,1388,1396,1400,1404,1409,1413,1423,1427,1441,1454,1458,1482,1491,1523,1528,1533,1542,1551,1556,1565],{"__ignoreMap":182},[186,1174,1175,1177],{"class":188,"line":189},[186,1176,193],{"class":192},[186,1178,197],{"class":196},[186,1180,1181,1183],{"class":188,"line":200},[186,1182,193],{"class":192},[186,1184,205],{"class":196},[186,1186,1187,1189],{"class":188,"line":208},[186,1188,193],{"class":192},[186,1190,1191],{"class":196}," \u003Cstring>\n",[186,1193,1194,1196],{"class":188,"line":215},[186,1195,193],{"class":192},[186,1197,1198],{"class":196}," \u003Cutility>\n",[186,1200,1201],{"class":188,"line":245},[186,1202,212],{"emptyLinePlaceholder":211},[186,1204,1205,1208],{"class":188,"line":251},[186,1206,1207],{"class":192},"class",[186,1209,1210],{"class":220}," Button\n",[186,1212,1213],{"class":188,"line":266},[186,1214,248],{"class":224},[186,1216,1217],{"class":188,"line":272},[186,1218,383],{"class":376},[186,1220,1221,1223,1225,1228,1230,1232],{"class":188,"line":277},[186,1222,389],{"class":220},[186,1224,392],{"class":224},[186,1226,1227],{"class":192},"\u003Cvoid",[186,1229,300],{"class":224},[186,1231,409],{"class":192},[186,1233,1234],{"class":224}," on_click_;\n",[186,1236,1237],{"class":188,"line":286},[186,1238,212],{"emptyLinePlaceholder":211},[186,1240,1241],{"class":188,"line":291},[186,1242,1243],{"class":192},"public:\n",[186,1245,1246,1249,1252,1254,1257,1259,1261,1263,1266,1269,1272],{"class":188,"line":321},[186,1247,1248],{"class":192},"    void",[186,1250,1251],{"class":220}," set_on_click",[186,1253,225],{"class":224},[186,1255,1256],{"class":220},"std",[186,1258,832],{"class":224},[186,1260,835],{"class":220},[186,1262,838],{"class":224},[186,1264,1265],{"class":192},"void",[186,1267,1268],{"class":224},"()> ",[186,1270,1271],{"class":230},"callback",[186,1273,242],{"class":224},[186,1275,1276],{"class":188,"line":327},[186,1277,324],{"class":224},[186,1279,1280,1283,1285,1287,1289,1292],{"class":188,"line":340},[186,1281,1282],{"class":224},"        on_click_ ",[186,1284,426],{"class":192},[186,1286,829],{"class":220},[186,1288,832],{"class":224},[186,1290,1291],{"class":220},"move",[186,1293,1294],{"class":224},"(callback);\n",[186,1296,1297],{"class":188,"line":346},[186,1298,343],{"class":224},[186,1300,1301],{"class":188,"line":352},[186,1302,212],{"emptyLinePlaceholder":211},[186,1304,1305,1307,1310,1313],{"class":188,"line":357},[186,1306,1248],{"class":192},[186,1308,1309],{"class":220}," click",[186,1311,1312],{"class":224},"() ",[186,1314,318],{"class":192},[186,1316,1317],{"class":188,"line":368},[186,1318,324],{"class":224},[186,1320,1321,1324],{"class":188,"line":373},[186,1322,1323],{"class":192},"        if",[186,1325,1326],{"class":224}," (on_click_)\n",[186,1328,1329],{"class":188,"line":380},[186,1330,1331],{"class":224},"        {\n",[186,1333,1334,1337],{"class":188,"line":386},[186,1335,1336],{"class":220},"            on_click_",[186,1338,1339],{"class":224},"();\n",[186,1341,1342],{"class":188,"line":415},[186,1343,1344],{"class":224},"        }\n",[186,1346,1347],{"class":188,"line":420},[186,1348,1349],{"class":192},"        else\n",[186,1351,1352],{"class":188,"line":432},[186,1353,1331],{"class":224},[186,1355,1356,1359,1361,1363,1366,1368,1370],{"class":188,"line":479},[186,1357,1358],{"class":220},"            std",[186,1360,437],{"class":224},[186,1362,440],{"class":192},[186,1364,1365],{"class":196}," \"no callback",[186,1367,470],{"class":454},[186,1369,473],{"class":196},[186,1371,476],{"class":224},[186,1373,1374],{"class":188,"line":484},[186,1375,1344],{"class":224},[186,1377,1378],{"class":188,"line":504},[186,1379,343],{"class":224},[186,1381,1382],{"class":188,"line":514},[186,1383,349],{"class":224},[186,1385,1386],{"class":188,"line":552},[186,1387,212],{"emptyLinePlaceholder":211},[186,1389,1390,1392,1394],{"class":188,"line":557},[186,1391,62],{"class":192},[186,1393,362],{"class":220},[186,1395,365],{"class":224},[186,1397,1398],{"class":188,"line":580},[186,1399,248],{"class":224},[186,1401,1402],{"class":188,"line":592},[186,1403,377],{"class":376},[186,1405,1406],{"class":188,"line":598},[186,1407,1408],{"class":224},"    Button button;\n",[186,1410,1411],{"class":188,"line":635},[186,1412,212],{"emptyLinePlaceholder":211},[186,1414,1415,1418,1421],{"class":188,"line":640},[186,1416,1417],{"class":224},"    button.",[186,1419,1420],{"class":220},"click",[186,1422,1339],{"class":224},[186,1424,1425],{"class":188,"line":650},[186,1426,212],{"emptyLinePlaceholder":211},[186,1428,1429,1431,1434,1436,1439],{"class":188,"line":688},[186,1430,389],{"class":220},[186,1432,1433],{"class":224},"::string name ",[186,1435,426],{"class":192},[186,1437,1438],{"class":196}," \"Save\"",[186,1440,476],{"class":224},[186,1442,1443,1445,1448,1450,1452],{"class":188,"line":693},[186,1444,294],{"class":192},[186,1446,1447],{"class":224}," count ",[186,1449,426],{"class":192},[186,1451,698],{"class":454},[186,1453,476],{"class":224},[186,1455,1456],{"class":188,"line":703},[186,1457,212],{"emptyLinePlaceholder":211},[186,1459,1461,1463,1466,1469,1472,1474,1476,1479],{"class":188,"line":1460},40,[186,1462,1417],{"class":224},[186,1464,1465],{"class":220},"set_on_click",[186,1467,1468],{"class":224},"([",[186,1470,1471],{"class":230},"name",[186,1473,234],{"class":224},[186,1475,854],{"class":192},[186,1477,1478],{"class":230},"count",[186,1480,1481],{"class":224},"]() {\n",[186,1483,1485,1488],{"class":188,"line":1484},41,[186,1486,1487],{"class":192},"        ++",[186,1489,1490],{"class":224},"count;\n",[186,1492,1494,1497,1499,1501,1504,1506,1509,1511,1513,1515,1517,1519,1521],{"class":188,"line":1493},42,[186,1495,1496],{"class":220},"        std",[186,1498,437],{"class":224},[186,1500,440],{"class":192},[186,1502,1503],{"class":224}," name ",[186,1505,440],{"class":192},[186,1507,1508],{"class":196}," \" clicked, count = \"",[186,1510,446],{"class":192},[186,1512,1447],{"class":224},[186,1514,440],{"class":192},[186,1516,467],{"class":196},[186,1518,470],{"class":454},[186,1520,473],{"class":196},[186,1522,476],{"class":224},[186,1524,1526],{"class":188,"line":1525},43,[186,1527,1011],{"class":224},[186,1529,1531],{"class":188,"line":1530},44,[186,1532,212],{"emptyLinePlaceholder":211},[186,1534,1536,1538,1540],{"class":188,"line":1535},45,[186,1537,1417],{"class":224},[186,1539,1420],{"class":220},[186,1541,1339],{"class":224},[186,1543,1545,1547,1549],{"class":188,"line":1544},46,[186,1546,1417],{"class":224},[186,1548,1420],{"class":220},[186,1550,1339],{"class":224},[186,1552,1554],{"class":188,"line":1553},47,[186,1555,212],{"emptyLinePlaceholder":211},[186,1557,1559,1561,1563],{"class":188,"line":1558},48,[186,1560,254],{"class":192},[186,1562,698],{"class":454},[186,1564,476],{"class":224},[186,1566,1568],{"class":188,"line":1567},49,[186,1569,269],{"class":224},[16,1571,1572,712],{},[709,1573,711],{},[177,1575,1578],{"className":1576,"code":1577,"language":718,"meta":182},[716],"no callback\nSave clicked, count = 1\nSave clicked, count = 2\n",[41,1579,1577],{"__ignoreMap":182},[16,1581,1582,1583,1585,1586,1588,1589,1592,1593,1595,1596,1599,1600,1602],{},"这里按值捕获 ",[41,1584,1471],{},"，按引用捕获 ",[41,1587,1478],{},"。因为 ",[41,1590,1591],{},"button"," 和 ",[41,1594,1478],{}," 都在 ",[41,1597,1598],{},"main"," 中，",[41,1601,1478],{}," 活得比回调调用更久，所以这个例子是安全的。真实异步场景中，保存回调时要更谨慎地处理生命周期。",[172,1604,1606],{"id":1605},"示例-4把多个不同回调放进同一个容器","示例 4：把多个不同回调放进同一个容器",[16,1608,1609,1610,1612,1613,1616],{},"每个 Lambda 的类型都不同，不能直接放进同一个 ",[41,1611,137],{},"。用 ",[41,1614,1615],{},"std::function\u003Cvoid()>"," 之后，它们就有了统一类型。",[177,1618,1620],{"className":179,"code":1619,"language":181,"meta":182,"style":182},"#include \u003Cfunctional>\n#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Cvector>\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    \u002F\u002F std::function 可以保存普通函数、lambda 或函数对象。\n    \u002F\u002F vector 是动态数组，元素数量可以在运行时变化。\n    std::vector\u003Cstd::function\u003Cvoid()>> tasks;\n\n    int total = 0;\n    std::string label = \"task\";\n\n    tasks.push_back([label]() {\n        std::cout \u003C\u003C label \u003C\u003C \" A\\n\";\n    });\n\n    tasks.push_back([&total]() {\n        total += 10;\n        std::cout \u003C\u003C \"add 10, total = \" \u003C\u003C total \u003C\u003C \"\\n\";\n    });\n\n    tasks.push_back([&total]() {\n        total *= 2;\n        std::cout \u003C\u003C \"double, total = \" \u003C\u003C total \u003C\u003C \"\\n\";\n    });\n\n    for (const auto& task : tasks)\n    {\n        task();\n    }\n\n    std::cout \u003C\u003C \"final total = \" \u003C\u003C total \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[41,1621,1622,1628,1634,1640,1647,1651,1659,1663,1667,1671,1676,1699,1703,1716,1730,1734,1749,1771,1775,1779,1794,1806,1831,1835,1839,1853,1865,1890,1894,1898,1914,1918,1925,1929,1933,1958,1962,1970],{"__ignoreMap":182},[186,1623,1624,1626],{"class":188,"line":189},[186,1625,193],{"class":192},[186,1627,197],{"class":196},[186,1629,1630,1632],{"class":188,"line":200},[186,1631,193],{"class":192},[186,1633,205],{"class":196},[186,1635,1636,1638],{"class":188,"line":208},[186,1637,193],{"class":192},[186,1639,1191],{"class":196},[186,1641,1642,1644],{"class":188,"line":215},[186,1643,193],{"class":192},[186,1645,1646],{"class":196}," \u003Cvector>\n",[186,1648,1649],{"class":188,"line":245},[186,1650,212],{"emptyLinePlaceholder":211},[186,1652,1653,1655,1657],{"class":188,"line":251},[186,1654,62],{"class":192},[186,1656,362],{"class":220},[186,1658,365],{"class":224},[186,1660,1661],{"class":188,"line":266},[186,1662,248],{"class":224},[186,1664,1665],{"class":188,"line":272},[186,1666,377],{"class":376},[186,1668,1669],{"class":188,"line":277},[186,1670,383],{"class":376},[186,1672,1673],{"class":188,"line":286},[186,1674,1675],{"class":376},"    \u002F\u002F vector 是动态数组，元素数量可以在运行时变化。\n",[186,1677,1678,1680,1683,1685,1687,1689,1691,1693,1696],{"class":188,"line":291},[186,1679,389],{"class":220},[186,1681,1682],{"class":224},"::vector",[186,1684,838],{"class":192},[186,1686,1256],{"class":220},[186,1688,392],{"class":224},[186,1690,1227],{"class":192},[186,1692,300],{"class":224},[186,1694,1695],{"class":192},">>",[186,1697,1698],{"class":224}," tasks;\n",[186,1700,1701],{"class":188,"line":321},[186,1702,212],{"emptyLinePlaceholder":211},[186,1704,1705,1707,1710,1712,1714],{"class":188,"line":327},[186,1706,294],{"class":192},[186,1708,1709],{"class":224}," total ",[186,1711,426],{"class":192},[186,1713,698],{"class":454},[186,1715,476],{"class":224},[186,1717,1718,1720,1723,1725,1728],{"class":188,"line":340},[186,1719,389],{"class":220},[186,1721,1722],{"class":224},"::string label ",[186,1724,426],{"class":192},[186,1726,1727],{"class":196}," \"task\"",[186,1729,476],{"class":224},[186,1731,1732],{"class":188,"line":346},[186,1733,212],{"emptyLinePlaceholder":211},[186,1735,1736,1739,1742,1744,1747],{"class":188,"line":352},[186,1737,1738],{"class":224},"    tasks.",[186,1740,1741],{"class":220},"push_back",[186,1743,1468],{"class":224},[186,1745,1746],{"class":230},"label",[186,1748,1481],{"class":224},[186,1750,1751,1753,1755,1757,1760,1762,1765,1767,1769],{"class":188,"line":357},[186,1752,1496],{"class":220},[186,1754,437],{"class":224},[186,1756,440],{"class":192},[186,1758,1759],{"class":224}," label ",[186,1761,440],{"class":192},[186,1763,1764],{"class":196}," \" A",[186,1766,470],{"class":454},[186,1768,473],{"class":196},[186,1770,476],{"class":224},[186,1772,1773],{"class":188,"line":368},[186,1774,1011],{"class":224},[186,1776,1777],{"class":188,"line":373},[186,1778,212],{"emptyLinePlaceholder":211},[186,1780,1781,1783,1785,1787,1789,1792],{"class":188,"line":380},[186,1782,1738],{"class":224},[186,1784,1741],{"class":220},[186,1786,1468],{"class":224},[186,1788,854],{"class":192},[186,1790,1791],{"class":230},"total",[186,1793,1481],{"class":224},[186,1795,1796,1799,1802,1804],{"class":188,"line":386},[186,1797,1798],{"class":224},"        total ",[186,1800,1801],{"class":192},"+=",[186,1803,907],{"class":454},[186,1805,476],{"class":224},[186,1807,1808,1810,1812,1814,1817,1819,1821,1823,1825,1827,1829],{"class":188,"line":415},[186,1809,1496],{"class":220},[186,1811,437],{"class":224},[186,1813,440],{"class":192},[186,1815,1816],{"class":196}," \"add 10, total = \"",[186,1818,446],{"class":192},[186,1820,1709],{"class":224},[186,1822,440],{"class":192},[186,1824,467],{"class":196},[186,1826,470],{"class":454},[186,1828,473],{"class":196},[186,1830,476],{"class":224},[186,1832,1833],{"class":188,"line":420},[186,1834,1011],{"class":224},[186,1836,1837],{"class":188,"line":432},[186,1838,212],{"emptyLinePlaceholder":211},[186,1840,1841,1843,1845,1847,1849,1851],{"class":188,"line":479},[186,1842,1738],{"class":224},[186,1844,1741],{"class":220},[186,1846,1468],{"class":224},[186,1848,854],{"class":192},[186,1850,1791],{"class":230},[186,1852,1481],{"class":224},[186,1854,1855,1857,1860,1863],{"class":188,"line":484},[186,1856,1798],{"class":224},[186,1858,1859],{"class":192},"*=",[186,1861,1862],{"class":454}," 2",[186,1864,476],{"class":224},[186,1866,1867,1869,1871,1873,1876,1878,1880,1882,1884,1886,1888],{"class":188,"line":504},[186,1868,1496],{"class":220},[186,1870,437],{"class":224},[186,1872,440],{"class":192},[186,1874,1875],{"class":196}," \"double, total = \"",[186,1877,446],{"class":192},[186,1879,1709],{"class":224},[186,1881,440],{"class":192},[186,1883,467],{"class":196},[186,1885,470],{"class":454},[186,1887,473],{"class":196},[186,1889,476],{"class":224},[186,1891,1892],{"class":188,"line":514},[186,1893,1011],{"class":224},[186,1895,1896],{"class":188,"line":552},[186,1897,212],{"emptyLinePlaceholder":211},[186,1899,1900,1903,1906,1908,1911],{"class":188,"line":557},[186,1901,1902],{"class":192},"    for",[186,1904,1905],{"class":224}," (",[186,1907,826],{"class":192},[186,1909,1910],{"class":192}," auto&",[186,1912,1913],{"class":224}," task : tasks)\n",[186,1915,1916],{"class":188,"line":580},[186,1917,324],{"class":224},[186,1919,1920,1923],{"class":188,"line":592},[186,1921,1922],{"class":220},"        task",[186,1924,1339],{"class":224},[186,1926,1927],{"class":188,"line":598},[186,1928,343],{"class":224},[186,1930,1931],{"class":188,"line":635},[186,1932,212],{"emptyLinePlaceholder":211},[186,1934,1935,1937,1939,1941,1944,1946,1948,1950,1952,1954,1956],{"class":188,"line":640},[186,1936,389],{"class":220},[186,1938,437],{"class":224},[186,1940,440],{"class":192},[186,1942,1943],{"class":196}," \"final total = \"",[186,1945,446],{"class":192},[186,1947,1709],{"class":224},[186,1949,440],{"class":192},[186,1951,467],{"class":196},[186,1953,470],{"class":454},[186,1955,473],{"class":196},[186,1957,476],{"class":224},[186,1959,1960],{"class":188,"line":650},[186,1961,212],{"emptyLinePlaceholder":211},[186,1963,1964,1966,1968],{"class":188,"line":688},[186,1965,254],{"class":192},[186,1967,698],{"class":454},[186,1969,476],{"class":224},[186,1971,1972],{"class":188,"line":693},[186,1973,269],{"class":224},[16,1975,1976,712],{},[709,1977,711],{},[177,1979,1982],{"className":1980,"code":1981,"language":718,"meta":182},[716],"task A\nadd 10, total = 10\ndouble, total = 20\nfinal total = 20\n",[41,1983,1981],{"__ignoreMap":182},[172,1985,1987],{"id":1986},"示例-5只立刻调用时模板参数也可以接收回调","示例 5：只立刻调用时，模板参数也可以接收回调",[16,1989,1990,1992],{},[41,1991,5],{}," 的优势是\"保存和统一类型\"。如果只是立刻调用，不需要保存，函数模板通常更轻量。",[177,1994,1996],{"className":179,"code":1995,"language":181,"meta":182,"style":182},"#include \u003Ciostream>\n\ntemplate\u003Ctypename Callback>\nvoid repeat(int times, Callback callback)\n{\n    for (int i = 0; i \u003C times; ++i)\n    {\n        callback(i);\n    }\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    repeat(3, [](int i) {\n        std::cout \u003C\u003C \"i = \" \u003C\u003C i \u003C\u003C \"\\n\";\n    });\n\n    \u002F\u002F 返回 0 表示程序正常结束。\n    return 0;\n}\n",[41,1997,1998,2004,2008,2024,2048,2052,2081,2085,2093,2097,2101,2105,2113,2117,2121,2140,2165,2169,2173,2178,2186],{"__ignoreMap":182},[186,1999,2000,2002],{"class":188,"line":189},[186,2001,193],{"class":192},[186,2003,205],{"class":196},[186,2005,2006],{"class":188,"line":200},[186,2007,212],{"emptyLinePlaceholder":211},[186,2009,2010,2013,2015,2018,2021],{"class":188,"line":208},[186,2011,2012],{"class":192},"template",[186,2014,838],{"class":224},[186,2016,2017],{"class":192},"typename",[186,2019,2020],{"class":220}," Callback",[186,2022,2023],{"class":224},">\n",[186,2025,2026,2028,2031,2033,2035,2038,2040,2043,2046],{"class":188,"line":215},[186,2027,1265],{"class":192},[186,2029,2030],{"class":220}," repeat",[186,2032,225],{"class":224},[186,2034,62],{"class":192},[186,2036,2037],{"class":230}," times",[186,2039,234],{"class":224},[186,2041,2042],{"class":220},"Callback",[186,2044,2045],{"class":230}," callback",[186,2047,242],{"class":224},[186,2049,2050],{"class":188,"line":245},[186,2051,248],{"class":224},[186,2053,2054,2056,2058,2060,2063,2065,2067,2070,2072,2075,2078],{"class":188,"line":251},[186,2055,1902],{"class":192},[186,2057,1905],{"class":224},[186,2059,62],{"class":192},[186,2061,2062],{"class":224}," i ",[186,2064,426],{"class":192},[186,2066,698],{"class":454},[186,2068,2069],{"class":224},"; i ",[186,2071,838],{"class":192},[186,2073,2074],{"class":224}," times; ",[186,2076,2077],{"class":192},"++",[186,2079,2080],{"class":224},"i)\n",[186,2082,2083],{"class":188,"line":266},[186,2084,324],{"class":224},[186,2086,2087,2090],{"class":188,"line":272},[186,2088,2089],{"class":220},"        callback",[186,2091,2092],{"class":224},"(i);\n",[186,2094,2095],{"class":188,"line":277},[186,2096,343],{"class":224},[186,2098,2099],{"class":188,"line":286},[186,2100,269],{"class":224},[186,2102,2103],{"class":188,"line":291},[186,2104,212],{"emptyLinePlaceholder":211},[186,2106,2107,2109,2111],{"class":188,"line":321},[186,2108,62],{"class":192},[186,2110,362],{"class":220},[186,2112,365],{"class":224},[186,2114,2115],{"class":188,"line":327},[186,2116,248],{"class":224},[186,2118,2119],{"class":188,"line":340},[186,2120,377],{"class":376},[186,2122,2123,2126,2128,2130,2133,2135,2138],{"class":188,"line":346},[186,2124,2125],{"class":220},"    repeat",[186,2127,225],{"class":224},[186,2129,455],{"class":454},[186,2131,2132],{"class":224},", [](",[186,2134,62],{"class":192},[186,2136,2137],{"class":230}," i",[186,2139,577],{"class":224},[186,2141,2142,2144,2146,2148,2151,2153,2155,2157,2159,2161,2163],{"class":188,"line":352},[186,2143,1496],{"class":220},[186,2145,437],{"class":224},[186,2147,440],{"class":192},[186,2149,2150],{"class":196}," \"i = \"",[186,2152,446],{"class":192},[186,2154,2062],{"class":224},[186,2156,440],{"class":192},[186,2158,467],{"class":196},[186,2160,470],{"class":454},[186,2162,473],{"class":196},[186,2164,476],{"class":224},[186,2166,2167],{"class":188,"line":357},[186,2168,1011],{"class":224},[186,2170,2171],{"class":188,"line":368},[186,2172,212],{"emptyLinePlaceholder":211},[186,2174,2175],{"class":188,"line":373},[186,2176,2177],{"class":376},"    \u002F\u002F 返回 0 表示程序正常结束。\n",[186,2179,2180,2182,2184],{"class":188,"line":380},[186,2181,254],{"class":192},[186,2183,698],{"class":454},[186,2185,476],{"class":224},[186,2187,2188],{"class":188,"line":386},[186,2189,269],{"class":224},[16,2191,2192,712],{},[709,2193,711],{},[177,2195,2198],{"className":2196,"code":2197,"language":718,"meta":182},[716],"i = 0\ni = 1\ni = 2\n",[41,2199,2197],{"__ignoreMap":182},[12,2201,2202],{"id":2202},"关键语法解释",[84,2204,2205,2218],{},[87,2206,2207],{},[90,2208,2209,2212,2215],{},[93,2210,2211],{"align":95},"写法",[93,2213,2214],{"align":95},"含义",[93,2216,2217],{"align":95},"注意事项",[106,2219,2220,2232,2250,2266,2279],{},[90,2221,2222,2226,2229],{},[111,2223,2224],{"align":95},[41,2225,1615],{},[111,2227,2228],{"align":95},"保存无参数、无返回值的回调",[111,2230,2231],{"align":95},"常用于按钮、定时器、任务队列",[90,2233,2234,2238,2247],{},[111,2235,2236],{"align":95},[41,2237,58],{},[111,2239,2240,2241,2243,2244,2246],{"align":95},"保存两个 ",[41,2242,62],{}," 参数、返回 ",[41,2245,62],{}," 的可调用对象",[111,2248,2249],{"align":95},"签名必须匹配",[90,2251,2252,2257,2263],{},[111,2253,2254],{"align":95},[41,2255,2256],{},"if (callback)",[111,2258,2259,2260,2262],{"align":95},"判断 ",[41,2261,5],{}," 是否为空",[111,2264,2265],{"align":95},"空回调不能直接调用",[90,2267,2268,2273,2276],{},[111,2269,2270],{"align":95},[41,2271,2272],{},"std::move(callback)",[111,2274,2275],{"align":95},"把传入的回调移动到成员变量",[111,2277,2278],{"align":95},"避免不必要拷贝",[90,2280,2281,2286,2289],{},[111,2282,2283],{"align":95},[41,2284,2285],{},"vector\u003Cstd::function\u003Cvoid()>>",[111,2287,2288],{"align":95},"保存多个不同类型的回调",[111,2290,2291],{"align":95},"容器元素类型统一",[12,2293,2295],{"id":2294},"stdfunction-和-lambda-的关系","std::function 和 Lambda 的关系",[16,2297,2298,2299,2301],{},"Lambda 是一种可调用对象，",[41,2300,5],{}," 是用来保存可调用对象的包装器。它们不是互相替代的关系。",[84,2303,2304,2314],{},[87,2305,2306],{},[90,2307,2308,2311],{},[93,2309,2310],{"align":95},"需求",[93,2312,2313],{"align":95},"推荐",[106,2315,2316,2324,2333,2342],{},[90,2317,2318,2321],{},[111,2319,2320],{"align":95},"就地写一段短逻辑",[111,2322,2323],{"align":95},"Lambda",[90,2325,2326,2329],{},[111,2327,2328],{"align":95},"把回调保存成变量或成员",[111,2330,2331],{"align":95},[41,2332,5],{},[90,2334,2335,2338],{},[111,2336,2337],{"align":95},"把多个不同 lambda 放入容器",[111,2339,2340],{"align":95},[41,2341,5],{},[90,2343,2344,2347],{},[111,2345,2346],{"align":95},"调用一次且性能敏感",[111,2348,2349],{"align":95},"函数模板",[12,2351,2352],{"id":2352},"常见错误",[2354,2355,2356,2364,2370,2373,2379],"ol",{},[23,2357,2358,2359,2361,2362,79],{},"空的 ",[41,2360,5],{}," 直接调用。调用前先判断 ",[41,2363,2256],{},[23,2365,2366,2367,2369],{},"签名不匹配。比如回调需要 ",[41,2368,734],{},"，就不能传入只接收一个参数的可调用对象。",[23,2371,2372],{},"保存回调时引用捕获了已经销毁的局部变量。",[23,2374,2375,2376,2378],{},"只需要临时调用一次，也把参数写成 ",[41,2377,5],{},"，在性能敏感代码中会产生不必要开销。",[23,2380,2381,2382,2385,2386,2389],{},"以为成员函数可以直接赋给 ",[41,2383,2384],{},"std::function\u003Cvoid(int)>","。非静态成员函数还需要对象，下一节会用 ",[41,2387,2388],{},"std::bind"," 和 Lambda 解决这个问题。",[12,2391,2392],{"id":2392},"使用建议",[2354,2394,2395,2400,2405,2408,2411],{},[23,2396,2397,2398,79],{},"需要保存回调时，用 ",[41,2399,5],{},[23,2401,2402,2403,79],{},"需要统一不同类型的回调时，用 ",[41,2404,5],{},[23,2406,2407],{},"只是立刻调用一次回调时，可以优先考虑模板参数。",[23,2409,2410],{},"保存回调时特别注意捕获对象的生命周期。",[23,2412,2413,2414,2416],{},"不要把 ",[41,2415,5],{}," 当成所有回调场景的唯一答案，它是清晰性和灵活性的工具，也有一定运行期开销。",[12,2418,2419],{"id":2419},"小结",[20,2421,2422,2425,2431,2436,2441],{},[23,2423,2424],{},"可调用对象包括普通函数、函数指针、Lambda、函数对象等。",[23,2426,2427,2430],{},[41,2428,2429],{},"std::function\u003C返回值(参数...)>"," 用统一类型保存签名匹配的可调用对象。",[23,2432,2433,2435],{},[41,2434,5],{}," 适合保存回调、作为成员变量、放入容器。",[23,2437,2358,2438,2440],{},[41,2439,5],{}," 不能调用。",[23,2442,2443],{},"只临时调用一次的回调，模板参数通常更轻量。",[2445,2446,2447],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":182,"searchDepth":200,"depth":200,"links":2449},[2450,2451,2452,2453,2454,2461,2462,2463,2464,2465],{"id":14,"depth":200,"text":14},{"id":46,"depth":200,"text":46},{"id":69,"depth":200,"text":70},{"id":82,"depth":200,"text":82},{"id":170,"depth":200,"text":170,"children":2455},[2456,2457,2458,2459,2460],{"id":174,"depth":208,"text":175},{"id":723,"depth":208,"text":724},{"id":1160,"depth":208,"text":1161},{"id":1605,"depth":208,"text":1606},{"id":1986,"depth":208,"text":1987},{"id":2202,"depth":200,"text":2202},{"id":2294,"depth":200,"text":2295},{"id":2352,"depth":200,"text":2352},{"id":2392,"depth":200,"text":2392},{"id":2419,"depth":200,"text":2419},"2000-1200","2023-10-05","2023-10-05-cplusplus-jiao-xue","\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md",false,{},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function",{"title":5,"description":182},"wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","xjfegTNTJZL2Ym5tKLw4LJaSyHIPSOXryWX6t2Tdr5M",[2479,2486,2492,2498,2504,2510,2516,2522,2528,2534,2540,2546,2552,2558,2564,2570,2576,2582,2588,2594,2600,2606,2612,2618,2624,2630,2636,2642,2648,2654,2660,2666,2672,2678,2684,2690,2696,2702,2708,2714,2720,2726,2732,2738,2744,2750,2756,2762,2768,2774,2780,2782,2787,2793,2799,2805,2811,2817,2823,2829,2835,2841,2847,2853,2859,2865,2871,2877,2883,2889,2895,2901,2907,2913,2919,2925,2931,2937,2943,2949,2955,2961,2967,2973,2979,2985,2991,2997,3003,3009,3015,3021],{"path":2480,"stem":2481,"title":2482,"authors":2483,"date":2467,"chapterOrder":2484,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++开发环境搭建与测试",[7],"0100",0,{"path":2487,"stem":2488,"title":2489,"authors":2490,"date":2467,"chapterOrder":2491,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识",[7],"0200",{"path":2493,"stem":2494,"title":2495,"authors":2496,"date":2467,"chapterOrder":2497,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","wiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","数据类型与数据存放",[7],"0300",{"path":2499,"stem":2500,"title":2501,"authors":2502,"date":2467,"chapterOrder":2503,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出",[7],"0400",{"path":2505,"stem":2506,"title":2507,"authors":2508,"date":2467,"chapterOrder":2509,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符",[7],"0500",{"path":2511,"stem":2512,"title":2513,"authors":2514,"date":2467,"chapterOrder":2515,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构",[7],"0600",{"path":2517,"stem":2518,"title":2519,"authors":2520,"date":2467,"chapterOrder":2521,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组",[7],"0700",{"path":2523,"stem":2524,"title":2525,"authors":2526,"date":2467,"chapterOrder":2527,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件",[7],"0800",{"path":2529,"stem":2530,"title":2531,"authors":2532,"date":2467,"chapterOrder":2533,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针",[7],"0900",{"path":2535,"stem":2536,"title":2537,"authors":2538,"date":2467,"chapterOrder":2539,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体",[7],"1000",{"path":2541,"stem":2542,"title":2543,"authors":2544,"date":2467,"chapterOrder":2545,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","内存分区与生命周期",[7],"1100",{"path":2547,"stem":2548,"title":2549,"authors":2550,"date":2467,"chapterOrder":2551,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用",[7],"1200",{"path":2553,"stem":2554,"title":2555,"authors":2556,"date":2467,"chapterOrder":2557,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","函数提高",[7],"1300",{"path":2559,"stem":2560,"title":2561,"authors":2562,"date":2467,"chapterOrder":2563,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空间",[7],"1350",{"path":2565,"stem":2566,"title":2567,"authors":2568,"date":2467,"chapterOrder":2569,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装",[7],"1400-0100",{"path":2571,"stem":2572,"title":2573,"authors":2574,"date":2467,"chapterOrder":2575,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","对象初始化和清理",[7],"1400-0200",{"path":2577,"stem":2578,"title":2579,"authors":2580,"date":2467,"chapterOrder":2581,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","对象模型与this指针",[7],"1400-0300",{"path":2583,"stem":2584,"title":2585,"authors":2586,"date":2467,"chapterOrder":2587,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元与运算符重载",[7],"1400-0400",{"path":2589,"stem":2590,"title":2591,"authors":2592,"date":2467,"chapterOrder":2593,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承",[7],"1400-0500",{"path":2595,"stem":2596,"title":2597,"authors":2598,"date":2467,"chapterOrder":2599,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态",[7],"1400-0600",{"path":2601,"stem":2602,"title":2603,"authors":2604,"date":2467,"chapterOrder":2605,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象",[7],"1400",{"path":2607,"stem":2608,"title":2609,"authors":2610,"date":2467,"chapterOrder":2611,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","函数指针",[7],"1450",{"path":2613,"stem":2614,"title":2615,"authors":2616,"date":2467,"chapterOrder":2617,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作",[7],"1500",{"path":2619,"stem":2620,"title":2621,"authors":2622,"date":2467,"chapterOrder":2623,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","wiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理",[7],"1600",{"path":2625,"stem":2626,"title":2627,"authors":2628,"date":2467,"chapterOrder":2629,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板",[7],"1700",{"path":2631,"stem":2632,"title":2633,"authors":2634,"date":2467,"chapterOrder":2635,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初识",[7],"1800-0100",{"path":2637,"stem":2638,"title":2639,"authors":2640,"date":2467,"chapterOrder":2641,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array",[7],"1800-0200",{"path":2643,"stem":2644,"title":2645,"authors":2646,"date":2467,"chapterOrder":2647,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器",[7],"1800-0300",{"path":2649,"stem":2650,"title":2651,"authors":2652,"date":2467,"chapterOrder":2653,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器",[7],"1800-0400",{"path":2655,"stem":2656,"title":2657,"authors":2658,"date":2467,"chapterOrder":2659,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器",[7],"1800-0500",{"path":2661,"stem":2662,"title":2663,"authors":2664,"date":2467,"chapterOrder":2665,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器",[7],"1800-0600",{"path":2667,"stem":2668,"title":2669,"authors":2670,"date":2467,"chapterOrder":2671,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器",[7],"1800-0700",{"path":2673,"stem":2674,"title":2675,"authors":2676,"date":2467,"chapterOrder":2677,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器",[7],"1800-0800",{"path":2679,"stem":2680,"title":2681,"authors":2682,"date":2467,"chapterOrder":2683,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器",[7],"1800-0900",{"path":2685,"stem":2686,"title":2687,"authors":2688,"date":2467,"chapterOrder":2689,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器",[7],"1800-1000",{"path":2691,"stem":2692,"title":2693,"authors":2694,"date":2467,"chapterOrder":2695,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函数对象与谓词",[7],"1800-1100",{"path":2697,"stem":2698,"title":2699,"authors":2700,"date":2467,"chapterOrder":2701,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法",[7],"1800-1200",{"path":2703,"stem":2704,"title":2705,"authors":2706,"date":2467,"chapterOrder":2707,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程",[7],"1800",{"path":2709,"stem":2710,"title":2711,"authors":2712,"date":2467,"chapterOrder":2713,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换",[7],"1900",{"path":2715,"stem":2716,"title":2717,"authors":2718,"date":2467,"chapterOrder":2719,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","auto",[7],"2000-0100",{"path":2721,"stem":2722,"title":2723,"authors":2724,"date":2467,"chapterOrder":2725,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr",[7],"2000-0200",{"path":2727,"stem":2728,"title":2729,"authors":2730,"date":2467,"chapterOrder":2731,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using",[7],"2000-0300",{"path":2733,"stem":2734,"title":2735,"authors":2736,"date":2467,"chapterOrder":2737,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class",[7],"2000-0400",{"path":2739,"stem":2740,"title":2741,"authors":2742,"date":2467,"chapterOrder":2743,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","范围 for 循环",[7],"2000-0500",{"path":2745,"stem":2746,"title":2747,"authors":2748,"date":2467,"chapterOrder":2749,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","结构化绑定",[7],"2000-0600",{"path":2751,"stem":2752,"title":2753,"authors":2754,"date":2467,"chapterOrder":2755,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr",[7],"2000-0700",{"path":2757,"stem":2758,"title":2759,"authors":2760,"date":2467,"chapterOrder":2761,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII",[7],"2000-0800",{"path":2763,"stem":2764,"title":2765,"authors":2766,"date":2467,"chapterOrder":2767,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针",[7],"2000-0900",{"path":2769,"stem":2770,"title":2771,"authors":2772,"date":2467,"chapterOrder":2773,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移动语义",[7],"2000-1000",{"path":2775,"stem":2776,"title":2777,"authors":2778,"date":2467,"chapterOrder":2779,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表达式",[7],"2000-1100",{"path":2474,"stem":2476,"title":5,"authors":2781,"date":2467,"chapterOrder":2466,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},[7],{"path":2783,"stem":2784,"title":2388,"authors":2785,"date":2467,"chapterOrder":2786,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind",[7],"2000-1300",{"path":2788,"stem":2789,"title":2790,"authors":2791,"date":2467,"chapterOrder":2792,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional",[7],"2000-1400",{"path":2794,"stem":2795,"title":2796,"authors":2797,"date":2467,"chapterOrder":2798,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant",[7],"2000-1500",{"path":2800,"stem":2801,"title":2802,"authors":2803,"date":2467,"chapterOrder":2804,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span",[7],"2000-1600",{"path":2806,"stem":2807,"title":2808,"authors":2809,"date":2467,"chapterOrder":2810,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print",[7],"2000-1700",{"path":2812,"stem":2813,"title":2814,"authors":2815,"date":2467,"chapterOrder":2816,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono",[7],"2000-1800",{"path":2818,"stem":2819,"title":2820,"authors":2821,"date":2467,"chapterOrder":2822,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-bing-fa-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-并发是什么","并发是什么",[7],"2000-1900-0100",{"path":2824,"stem":2825,"title":2826,"authors":2827,"date":2467,"chapterOrder":2828,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-bing-xing-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-并行是什么","并行是什么",[7],"2000-1900-0200",{"path":2830,"stem":2831,"title":2832,"authors":2833,"date":2467,"chapterOrder":2834,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-xie-cheng-shi-shen-me","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-协程是什么","协程是什么",[7],"2000-1900-0300",{"path":2836,"stem":2837,"title":2838,"authors":2839,"date":2467,"chapterOrder":2840,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1000-bing-fa-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1000-并发编程","并发编程",[7],"2000-1900-1000",{"path":2842,"stem":2843,"title":2844,"authors":2845,"date":2467,"chapterOrder":2846,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1100-std-thread","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1100-std-thread","std::thread",[7],"2000-1900-1100",{"path":2848,"stem":2849,"title":2850,"authors":2851,"date":2467,"chapterOrder":2852,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1200-mutex-lock-guard","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1200-mutex-lock-guard","mutex 与 RAII 锁",[7],"2000-1900-1200",{"path":2854,"stem":2855,"title":2856,"authors":2857,"date":2467,"chapterOrder":2858,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1300-std-atomic","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1300-std-atomic","std::atomic",[7],"2000-1900-1300",{"path":2860,"stem":2861,"title":2862,"authors":2863,"date":2467,"chapterOrder":2864,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1400-condition-variable","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1400-condition-variable","condition_variable",[7],"2000-1900-1400",{"path":2866,"stem":2867,"title":2868,"authors":2869,"date":2467,"chapterOrder":2870,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1500-future-async-promise","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1500-future-async-promise","future、async、promise 与 packaged_task",[7],"2000-1900-1500",{"path":2872,"stem":2873,"title":2874,"authors":2875,"date":2467,"chapterOrder":2876,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1600-jthread-stop-token","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1600-jthread-stop-token","jthread 与 stop_token",[7],"2000-1900-1600",{"path":2878,"stem":2879,"title":2880,"authors":2881,"date":2467,"chapterOrder":2882,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-1700-semaphore-latch-barrier","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-1700-semaphore-latch-barrier","semaphore、latch 与 barrier",[7],"2000-1900-1700",{"path":2884,"stem":2885,"title":2886,"authors":2887,"date":2467,"chapterOrder":2888,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bing-xing-yu-xie-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发并行与协程","并发、并行与协程",[7],"2000-1900",{"path":2890,"stem":2891,"title":2892,"authors":2893,"date":2467,"chapterOrder":2894,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem",[7],"2000-2000",{"path":2896,"stem":2897,"title":2898,"authors":2899,"date":2467,"chapterOrder":2900,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 简介",[7],"2000-2100",{"path":2902,"stem":2903,"title":2904,"authors":2905,"date":2467,"chapterOrder":2906,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++",[7],"2000",{"path":2908,"stem":2909,"title":2910,"authors":2911,"date":2467,"chapterOrder":2912,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定时器与异步 IO",[7],"2100-0100-0100",{"path":2914,"stem":2915,"title":2916,"authors":2917,"date":2467,"chapterOrder":2918,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基础",[7],"2100-0100-0200",{"path":2920,"stem":2921,"title":2922,"authors":2923,"date":2467,"chapterOrder":2924,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信教学",[7],"2100-0100-0300",{"path":2926,"stem":2927,"title":2928,"authors":2929,"date":2467,"chapterOrder":2930,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0350-chuan-kou-tong-xin-chuan-kou-bao-xie-yi-shi-li","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0350-串口通信串口包协议实例","串口通信串口包协议实例",[7],"2100-0100-0350",{"path":2932,"stem":2933,"title":2934,"authors":2935,"date":2467,"chapterOrder":2936,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信",[7],"2100-0100-0400",{"path":2938,"stem":2939,"title":2940,"authors":2941,"date":2467,"chapterOrder":2942,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信",[7],"2100-0100-0500",{"path":2944,"stem":2945,"title":2946,"authors":2947,"date":2467,"chapterOrder":2948,"chapterDepth":200,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","机器人工程写法与 ROS2 集成",[7],"2100-0100-0600",{"path":2950,"stem":2951,"title":2952,"authors":2953,"date":2467,"chapterOrder":2954,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio异步IO库",[7],"2100-0100",{"path":2956,"stem":2957,"title":2958,"authors":2959,"date":2467,"chapterOrder":2960,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen线性代数库",[7],"2100-0200",{"path":2962,"stem":2963,"title":2964,"authors":2965,"date":2467,"chapterOrder":2966,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV计算机视觉库",[7],"2100-0300",{"path":2968,"stem":2969,"title":2970,"authors":2971,"date":2467,"chapterOrder":2972,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL点云库",[7],"2100-0400",{"path":2974,"stem":2975,"title":2976,"authors":2977,"date":2467,"chapterOrder":2978,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李群李代数库",[7],"2100-0500",{"path":2980,"stem":2981,"title":2982,"authors":2983,"date":2467,"chapterOrder":2984,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习",[7],"2100",{"path":2986,"stem":2987,"title":2988,"authors":2989,"date":2467,"chapterOrder":2990,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets与构建安装",[7],"2200-0100",{"path":2992,"stem":2993,"title":2994,"authors":2995,"date":2467,"chapterOrder":2996,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","顶层CMake与公共编译选项",[7],"2200-0200",{"path":2998,"stem":2999,"title":3000,"authors":3001,"date":2467,"chapterOrder":3002,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src与lib模块CMake详解",[7],"2200-0300",{"path":3004,"stem":3005,"title":3006,"authors":3007,"date":2467,"chapterOrder":3008,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方库依赖写法",[7],"2200-0400",{"path":3010,"stem":3011,"title":3012,"authors":3013,"date":2467,"chapterOrder":3014,"chapterDepth":189,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板扩展与常见问题",[7],"2200-0500",{"path":3016,"stem":3017,"title":3018,"authors":3019,"date":2467,"chapterOrder":3020,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":2472},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板",[7],"2200",{"path":2469,"stem":3022,"title":3023,"authors":3024,"date":2467,"chapterOrder":3025,"chapterDepth":2485,"docKey":2468,"docRoot":2469,"docTitle":2470,"isWikiDoc":211,"isWikiIndex":211},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",[7],null,[3027,3029,3032,3035],{"name":7,"image":3028},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":3030,"image":3031},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":3033,"image":3034},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":3036,"image":3037},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431898475]