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