[{"data":1,"prerenderedAt":3623},["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":3063,"wiki:author-members":3611},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":172,"chapterOrder":3051,"date":3052,"description":165,"docKey":3053,"docRoot":3054,"docTitle":3055,"extension":3056,"isWikiDoc":202,"isWikiIndex":3057,"meta":3058,"navigation":202,"path":3059,"seo":3060,"stem":3061,"wikiDepth":172,"__hash__":3062},"wiki\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind.md","std::bind",[7],"董佳辉",{"type":9,"value":10,"toc":3033},"minimark",[11,15,19,32,38,48,51,67,80,151,154,159,530,537,545,549,552,819,823,829,833,839,1214,1218,1224,1239,1243,1246,1685,1689,1695,1699,1712,1984,1988,1994,2002,2017,2353,2357,2363,2366,2398,2401,2456,2468,2471,2497,2506,2531,2534,2561,2577,2580,2600,2603,2628,2634,2655,2658,2683,2689,2700,2703,2731,2743,2752,2755,2855,2859,2919,2924,2927,2957,2960,2987,2990,3029],[12,13,14],"h2",{"id":14},"本节解决什么问题",[16,17,18],"p",{},"有时你已经有一个函数，但它的参数和目标接口不匹配：",[20,21,22,26,29],"ul",{},[23,24,25],"li",{},"想提前固定某些参数。",[23,27,28],{},"想调整参数顺序。",[23,30,31],{},"想把成员函数绑定到某个对象上，变成普通回调。",[16,33,34,37],{},[35,36,5],"code",{}," 可以把已有可调用对象适配成新的可调用对象。",[16,39,40,41,44,45,47],{},"现代 C++ 中，很多 ",[35,42,43],{},"bind"," 场景可以用 Lambda 写得更清楚。不过 ",[35,46,5],{}," 在旧项目、ROS2 示例、Boost.Asio 回调、成员函数适配中仍然经常出现，值得掌握。",[12,49,50],{"id":50},"这个特性是什么",[16,52,53,55,56,59,60,59,63,66],{},[35,54,5],{}," 接收一个可调用对象和一组绑定参数，返回一个新的可调用对象。调用新对象时，占位符 ",[35,57,58],{},"_1","、",[35,61,62],{},"_2",[35,64,65],{},"_3"," 表示\"调用时传进来的第 1、2、3 个参数\"。",[16,68,69,71,72,75,76,79],{},[35,70,5],{}," 需要头文件 ",[35,73,74],{},"\u003Cfunctional>","，占位符在命名空间 ",[35,77,78],{},"std::placeholders"," 中。",[81,82,83,97],"table",{},[84,85,86],"thead",{},[87,88,89,94],"tr",{},[90,91,93],"th",{"align":92},"left","写法",[90,95,96],{"align":92},"含义",[98,99,100,118,128,141],"tbody",{},[87,101,102,108],{},[103,104,105],"td",{"align":92},[35,106,107],{},"std::bind(f, 10, _1)",[103,109,110,111,114,115],{"align":92},"固定 ",[35,112,113],{},"f"," 的第一个参数为 ",[35,116,117],{},"10",[87,119,120,125],{},[103,121,122],{"align":92},[35,123,124],{},"std::bind(f, _2, _1)",[103,126,127],{"align":92},"调换调用时两个参数的顺序",[87,129,130,135],{},[103,131,132],{"align":92},[35,133,134],{},"std::bind(&C::m, &obj, _1)",[103,136,137,138],{"align":92},"把成员函数绑定到对象 ",[35,139,140],{},"obj",[87,142,143,148],{},[103,144,145],{"align":92},[35,146,147],{},"std::bind(f, std::ref(x), _1)",[103,149,150],{"align":92},"绑定引用，而不是拷贝",[12,152,153],{"id":153},"示例代码",[155,156,158],"h3",{"id":157},"示例-1固定普通函数的部分参数","示例 1：固定普通函数的部分参数",[160,161,166],"pre",{"className":162,"code":163,"language":164,"meta":165,"style":165},"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","",[35,167,168,181,189,197,204,256,262,313,319,324,335,340,347,363,377,382,406,411,417,444,462,467,496,509,514,525],{"__ignoreMap":165},[169,170,173,177],"span",{"class":171,"line":172},"line",1,[169,174,176],{"class":175},"szBVR","#include",[169,178,180],{"class":179},"sZZnC"," \u003Cfunctional>\n",[169,182,184,186],{"class":171,"line":183},2,[169,185,176],{"class":175},[169,187,188],{"class":179}," \u003Ciostream>\n",[169,190,192,194],{"class":171,"line":191},3,[169,193,176],{"class":175},[169,195,196],{"class":179}," \u003Cstring>\n",[169,198,200],{"class":171,"line":199},4,[169,201,203],{"emptyLinePlaceholder":202},true,"\n",[169,205,207,210,214,218,221,224,227,230,233,237,240,243,246,248,250,253],{"class":171,"line":206},5,[169,208,209],{"class":175},"void",[169,211,213],{"class":212},"sScJk"," print_student",[169,215,217],{"class":216},"sVt8B","(",[169,219,220],{"class":175},"const",[169,222,223],{"class":212}," std",[169,225,226],{"class":216},"::",[169,228,229],{"class":212},"string",[169,231,232],{"class":175},"&",[169,234,236],{"class":235},"s4XuR"," name",[169,238,239],{"class":216},", ",[169,241,242],{"class":175},"int",[169,244,245],{"class":235}," age",[169,247,239],{"class":216},[169,249,242],{"class":175},[169,251,252],{"class":235}," score",[169,254,255],{"class":216},")\n",[169,257,259],{"class":171,"line":258},6,[169,260,261],{"class":216},"{\n",[169,263,265,268,271,274,277,279,282,285,288,290,293,295,298,300,303,307,310],{"class":171,"line":264},7,[169,266,267],{"class":212},"    std",[169,269,270],{"class":216},"::cout ",[169,272,273],{"class":175},"\u003C\u003C",[169,275,276],{"class":216}," name ",[169,278,273],{"class":175},[169,280,281],{"class":179}," \" age=\"",[169,283,284],{"class":175}," \u003C\u003C",[169,286,287],{"class":216}," age ",[169,289,273],{"class":175},[169,291,292],{"class":179}," \" score=\"",[169,294,284],{"class":175},[169,296,297],{"class":216}," score ",[169,299,273],{"class":175},[169,301,302],{"class":179}," \"",[169,304,306],{"class":305},"sj4cs","\\n",[169,308,309],{"class":179},"\"",[169,311,312],{"class":216},";\n",[169,314,316],{"class":171,"line":315},8,[169,317,318],{"class":216},"}\n",[169,320,322],{"class":171,"line":321},9,[169,323,203],{"emptyLinePlaceholder":202},[169,325,327,329,332],{"class":171,"line":326},10,[169,328,242],{"class":175},[169,330,331],{"class":212}," main",[169,333,334],{"class":216},"()\n",[169,336,338],{"class":171,"line":337},11,[169,339,261],{"class":216},[169,341,343],{"class":171,"line":342},12,[169,344,346],{"class":345},"sJ8bj","    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[169,348,350,353,355,357,360],{"class":171,"line":349},13,[169,351,352],{"class":175},"    using",[169,354,223],{"class":212},[169,356,226],{"class":216},[169,358,359],{"class":212},"placeholders",[169,361,362],{"class":216},"::_1;\n",[169,364,366,368,370,372,374],{"class":171,"line":365},14,[169,367,352],{"class":175},[169,369,223],{"class":212},[169,371,226],{"class":216},[169,373,359],{"class":212},[169,375,376],{"class":216},"::_2;\n",[169,378,380],{"class":171,"line":379},15,[169,381,203],{"emptyLinePlaceholder":202},[169,383,385,388,390,393,395,398,400,403],{"class":171,"line":384},16,[169,386,387],{"class":212},"    print_student",[169,389,217],{"class":216},[169,391,392],{"class":179},"\"Alice\"",[169,394,239],{"class":216},[169,396,397],{"class":305},"20",[169,399,239],{"class":216},[169,401,402],{"class":305},"95",[169,404,405],{"class":216},");\n",[169,407,409],{"class":171,"line":408},17,[169,410,203],{"emptyLinePlaceholder":202},[169,412,414],{"class":171,"line":413},18,[169,415,416],{"class":345},"    \u002F\u002F bind 会把函数和部分参数提前绑定成一个可调用对象。\n",[169,418,420,423,426,429,431,433,435,438,441],{"class":171,"line":419},19,[169,421,422],{"class":175},"    auto",[169,424,425],{"class":216}," print_bob ",[169,427,428],{"class":175},"=",[169,430,223],{"class":212},[169,432,226],{"class":216},[169,434,43],{"class":212},[169,436,437],{"class":216},"(print_student, ",[169,439,440],{"class":179},"\"Bob\"",[169,442,443],{"class":216},", _1, _2);\n",[169,445,447,450,452,455,457,460],{"class":171,"line":446},20,[169,448,449],{"class":212},"    print_bob",[169,451,217],{"class":216},[169,453,454],{"class":305},"21",[169,456,239],{"class":216},[169,458,459],{"class":305},"88",[169,461,405],{"class":216},[169,463,465],{"class":171,"line":464},21,[169,466,203],{"emptyLinePlaceholder":202},[169,468,470,472,475,477,479,481,483,485,488,490,493],{"class":171,"line":469},22,[169,471,422],{"class":175},[169,473,474],{"class":216}," print_charlie_score ",[169,476,428],{"class":175},[169,478,223],{"class":212},[169,480,226],{"class":216},[169,482,43],{"class":212},[169,484,437],{"class":216},[169,486,487],{"class":179},"\"Charlie\"",[169,489,239],{"class":216},[169,491,492],{"class":305},"22",[169,494,495],{"class":216},", _1);\n",[169,497,499,502,504,507],{"class":171,"line":498},23,[169,500,501],{"class":212},"    print_charlie_score",[169,503,217],{"class":216},[169,505,506],{"class":305},"91",[169,508,405],{"class":216},[169,510,512],{"class":171,"line":511},24,[169,513,203],{"emptyLinePlaceholder":202},[169,515,517,520,523],{"class":171,"line":516},25,[169,518,519],{"class":175},"    return",[169,521,522],{"class":305}," 0",[169,524,312],{"class":216},[169,526,528],{"class":171,"line":527},26,[169,529,318],{"class":216},[16,531,532,536],{},[533,534,535],"strong",{},"运行结果","：",[160,538,543],{"className":539,"code":541,"language":542,"meta":165},[540],"language-text","Alice age=20 score=95\nBob age=21 score=88\nCharlie age=22 score=91\n","text",[35,544,541],{"__ignoreMap":165},[155,546,548],{"id":547},"示例-2调整参数顺序","示例 2：调整参数顺序",[16,550,551],{},"占位符的位置决定了原函数接收到的参数顺序。",[160,553,555],{"className":162,"code":554,"language":164,"meta":165,"style":165},"#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",[35,556,557,563,569,573,596,600,647,651,655,663,667,671,683,695,699,715,719,723,741,756,760,782,793,803,807,815],{"__ignoreMap":165},[169,558,559,561],{"class":171,"line":172},[169,560,176],{"class":175},[169,562,180],{"class":179},[169,564,565,567],{"class":171,"line":183},[169,566,176],{"class":175},[169,568,188],{"class":179},[169,570,571],{"class":171,"line":191},[169,572,203],{"emptyLinePlaceholder":202},[169,574,575,577,580,582,584,587,589,591,594],{"class":171,"line":199},[169,576,209],{"class":175},[169,578,579],{"class":212}," divide",[169,581,217],{"class":216},[169,583,242],{"class":175},[169,585,586],{"class":235}," a",[169,588,239],{"class":216},[169,590,242],{"class":175},[169,592,593],{"class":235}," b",[169,595,255],{"class":216},[169,597,598],{"class":171,"line":206},[169,599,261],{"class":216},[169,601,602,604,606,608,611,613,616,618,621,623,626,628,631,634,637,639,641,643,645],{"class":171,"line":258},[169,603,267],{"class":212},[169,605,270],{"class":216},[169,607,273],{"class":175},[169,609,610],{"class":216}," a ",[169,612,273],{"class":175},[169,614,615],{"class":179}," \" \u002F \"",[169,617,284],{"class":175},[169,619,620],{"class":216}," b ",[169,622,273],{"class":175},[169,624,625],{"class":179}," \" = \"",[169,627,284],{"class":175},[169,629,630],{"class":216}," (a ",[169,632,633],{"class":175},"\u002F",[169,635,636],{"class":216}," b) ",[169,638,273],{"class":175},[169,640,302],{"class":179},[169,642,306],{"class":305},[169,644,309],{"class":179},[169,646,312],{"class":216},[169,648,649],{"class":171,"line":264},[169,650,318],{"class":216},[169,652,653],{"class":171,"line":315},[169,654,203],{"emptyLinePlaceholder":202},[169,656,657,659,661],{"class":171,"line":321},[169,658,242],{"class":175},[169,660,331],{"class":212},[169,662,334],{"class":216},[169,664,665],{"class":171,"line":326},[169,666,261],{"class":216},[169,668,669],{"class":171,"line":337},[169,670,346],{"class":345},[169,672,673,675,677,679,681],{"class":171,"line":342},[169,674,352],{"class":175},[169,676,223],{"class":212},[169,678,226],{"class":216},[169,680,359],{"class":212},[169,682,362],{"class":216},[169,684,685,687,689,691,693],{"class":171,"line":349},[169,686,352],{"class":175},[169,688,223],{"class":212},[169,690,226],{"class":216},[169,692,359],{"class":212},[169,694,376],{"class":216},[169,696,697],{"class":171,"line":365},[169,698,203],{"emptyLinePlaceholder":202},[169,700,701,704,706,708,710,713],{"class":171,"line":379},[169,702,703],{"class":212},"    divide",[169,705,217],{"class":216},[169,707,117],{"class":305},[169,709,239],{"class":216},[169,711,712],{"class":305},"2",[169,714,405],{"class":216},[169,716,717],{"class":171,"line":384},[169,718,203],{"emptyLinePlaceholder":202},[169,720,721],{"class":171,"line":408},[169,722,416],{"class":345},[169,724,725,727,730,732,734,736,738],{"class":171,"line":413},[169,726,422],{"class":175},[169,728,729],{"class":216}," swapped ",[169,731,428],{"class":175},[169,733,223],{"class":212},[169,735,226],{"class":216},[169,737,43],{"class":212},[169,739,740],{"class":216},"(divide, _2, _1);\n",[169,742,743,746,748,750,752,754],{"class":171,"line":419},[169,744,745],{"class":212},"    swapped",[169,747,217],{"class":216},[169,749,712],{"class":305},[169,751,239],{"class":216},[169,753,117],{"class":305},[169,755,405],{"class":216},[169,757,758],{"class":171,"line":446},[169,759,203],{"emptyLinePlaceholder":202},[169,761,762,764,767,769,771,773,775,778,780],{"class":171,"line":464},[169,763,422],{"class":175},[169,765,766],{"class":216}," half ",[169,768,428],{"class":175},[169,770,223],{"class":212},[169,772,226],{"class":216},[169,774,43],{"class":212},[169,776,777],{"class":216},"(divide, _1, ",[169,779,712],{"class":305},[169,781,405],{"class":216},[169,783,784,787,789,791],{"class":171,"line":469},[169,785,786],{"class":212},"    half",[169,788,217],{"class":216},[169,790,117],{"class":305},[169,792,405],{"class":216},[169,794,795,797,799,801],{"class":171,"line":498},[169,796,786],{"class":212},[169,798,217],{"class":216},[169,800,397],{"class":305},[169,802,405],{"class":216},[169,804,805],{"class":171,"line":511},[169,806,203],{"emptyLinePlaceholder":202},[169,808,809,811,813],{"class":171,"line":516},[169,810,519],{"class":175},[169,812,522],{"class":305},[169,814,312],{"class":216},[169,816,817],{"class":171,"line":527},[169,818,318],{"class":216},[16,820,821,536],{},[533,822,535],{},[160,824,827],{"className":825,"code":826,"language":542,"meta":165},[540],"10 \u002F 2 = 5\n10 \u002F 2 = 5\n10 \u002F 2 = 5\n20 \u002F 2 = 10\n",[35,828,826],{"__ignoreMap":165},[155,830,832],{"id":831},"示例-3绑定成员函数","示例 3：绑定成员函数",[16,834,835,836,838],{},"非静态成员函数需要对象才能调用。",[35,837,5],{}," 的第二个参数通常就是对象指针、对象引用或智能指针。",[160,840,842],{"className":162,"code":841,"language":164,"meta":165,"style":165},"#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",[35,843,844,850,856,862,866,874,878,885,889,894,926,930,966,971,1013,1018,1023,1027,1035,1039,1043,1055,1067,1071,1086,1090,1094,1125,1143,1148,1182,1195,1200,1209],{"__ignoreMap":165},[169,845,846,848],{"class":171,"line":172},[169,847,176],{"class":175},[169,849,180],{"class":179},[169,851,852,854],{"class":171,"line":183},[169,853,176],{"class":175},[169,855,188],{"class":179},[169,857,858,860],{"class":171,"line":191},[169,859,176],{"class":175},[169,861,196],{"class":179},[169,863,864],{"class":171,"line":199},[169,865,203],{"emptyLinePlaceholder":202},[169,867,868,871],{"class":171,"line":206},[169,869,870],{"class":175},"class",[169,872,873],{"class":212}," Printer\n",[169,875,876],{"class":171,"line":258},[169,877,261],{"class":216},[169,879,880,882],{"class":171,"line":264},[169,881,267],{"class":212},[169,883,884],{"class":216},"::string prefix_;\n",[169,886,887],{"class":171,"line":315},[169,888,203],{"emptyLinePlaceholder":202},[169,890,891],{"class":171,"line":321},[169,892,893],{"class":175},"public:\n",[169,895,896,899,902,904,906,908,910,912,914,917,920,923],{"class":171,"line":326},[169,897,898],{"class":175},"    explicit",[169,900,901],{"class":212}," Printer",[169,903,217],{"class":216},[169,905,220],{"class":175},[169,907,223],{"class":212},[169,909,226],{"class":216},[169,911,229],{"class":212},[169,913,232],{"class":175},[169,915,916],{"class":235}," prefix",[169,918,919],{"class":216},") : ",[169,921,922],{"class":212},"prefix_",[169,924,925],{"class":216},"(prefix) {}\n",[169,927,928],{"class":171,"line":337},[169,929,203],{"emptyLinePlaceholder":202},[169,931,932,935,938,940,942,945,947,949,951,953,955,957,960,963],{"class":171,"line":342},[169,933,934],{"class":175},"    void",[169,936,937],{"class":212}," print",[169,939,217],{"class":216},[169,941,242],{"class":175},[169,943,944],{"class":235}," id",[169,946,239],{"class":216},[169,948,220],{"class":175},[169,950,223],{"class":212},[169,952,226],{"class":216},[169,954,229],{"class":212},[169,956,232],{"class":175},[169,958,959],{"class":235}," text",[169,961,962],{"class":216},") ",[169,964,965],{"class":175},"const\n",[169,967,968],{"class":171,"line":349},[169,969,970],{"class":216},"    {\n",[169,972,973,976,978,980,983,985,988,990,993,995,998,1000,1003,1005,1007,1009,1011],{"class":171,"line":365},[169,974,975],{"class":212},"        std",[169,977,270],{"class":216},[169,979,273],{"class":175},[169,981,982],{"class":216}," prefix_ ",[169,984,273],{"class":175},[169,986,987],{"class":179}," \" #\"",[169,989,284],{"class":175},[169,991,992],{"class":216}," id ",[169,994,273],{"class":175},[169,996,997],{"class":179}," \": \"",[169,999,284],{"class":175},[169,1001,1002],{"class":216}," text ",[169,1004,273],{"class":175},[169,1006,302],{"class":179},[169,1008,306],{"class":305},[169,1010,309],{"class":179},[169,1012,312],{"class":216},[169,1014,1015],{"class":171,"line":379},[169,1016,1017],{"class":216},"    }\n",[169,1019,1020],{"class":171,"line":384},[169,1021,1022],{"class":216},"};\n",[169,1024,1025],{"class":171,"line":408},[169,1026,203],{"emptyLinePlaceholder":202},[169,1028,1029,1031,1033],{"class":171,"line":413},[169,1030,242],{"class":175},[169,1032,331],{"class":212},[169,1034,334],{"class":216},[169,1036,1037],{"class":171,"line":419},[169,1038,261],{"class":216},[169,1040,1041],{"class":171,"line":446},[169,1042,346],{"class":345},[169,1044,1045,1047,1049,1051,1053],{"class":171,"line":464},[169,1046,352],{"class":175},[169,1048,223],{"class":212},[169,1050,226],{"class":216},[169,1052,359],{"class":212},[169,1054,362],{"class":216},[169,1056,1057,1059,1061,1063,1065],{"class":171,"line":469},[169,1058,352],{"class":175},[169,1060,223],{"class":212},[169,1062,226],{"class":216},[169,1064,359],{"class":212},[169,1066,376],{"class":216},[169,1068,1069],{"class":171,"line":498},[169,1070,203],{"emptyLinePlaceholder":202},[169,1072,1073,1076,1079,1081,1084],{"class":171,"line":511},[169,1074,1075],{"class":216},"    Printer ",[169,1077,1078],{"class":212},"printer",[169,1080,217],{"class":216},[169,1082,1083],{"class":179},"\"LOG\"",[169,1085,405],{"class":216},[169,1087,1088],{"class":171,"line":516},[169,1089,203],{"emptyLinePlaceholder":202},[169,1091,1092],{"class":171,"line":527},[169,1093,416],{"class":345},[169,1095,1097,1099,1102,1104,1106,1108,1110,1112,1114,1117,1120,1122],{"class":171,"line":1096},27,[169,1098,422],{"class":175},[169,1100,1101],{"class":216}," print_any ",[169,1103,428],{"class":175},[169,1105,223],{"class":212},[169,1107,226],{"class":216},[169,1109,43],{"class":212},[169,1111,217],{"class":216},[169,1113,232],{"class":175},[169,1115,1116],{"class":212},"Printer",[169,1118,1119],{"class":216},"::print, ",[169,1121,232],{"class":175},[169,1123,1124],{"class":216},"printer, _1, _2);\n",[169,1126,1128,1131,1133,1136,1138,1141],{"class":171,"line":1127},28,[169,1129,1130],{"class":212},"    print_any",[169,1132,217],{"class":216},[169,1134,1135],{"class":305},"7",[169,1137,239],{"class":216},[169,1139,1140],{"class":179},"\"ready\"",[169,1142,405],{"class":216},[169,1144,1146],{"class":171,"line":1145},29,[169,1147,203],{"emptyLinePlaceholder":202},[169,1149,1151,1153,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1177,1180],{"class":171,"line":1150},30,[169,1152,422],{"class":175},[169,1154,1155],{"class":216}," print_ok ",[169,1157,428],{"class":175},[169,1159,223],{"class":212},[169,1161,226],{"class":216},[169,1163,43],{"class":212},[169,1165,217],{"class":216},[169,1167,232],{"class":175},[169,1169,1116],{"class":212},[169,1171,1119],{"class":216},[169,1173,232],{"class":175},[169,1175,1176],{"class":216},"printer, _1, ",[169,1178,1179],{"class":179},"\"ok\"",[169,1181,405],{"class":216},[169,1183,1185,1188,1190,1193],{"class":171,"line":1184},31,[169,1186,1187],{"class":212},"    print_ok",[169,1189,217],{"class":216},[169,1191,1192],{"class":305},"8",[169,1194,405],{"class":216},[169,1196,1198],{"class":171,"line":1197},32,[169,1199,203],{"emptyLinePlaceholder":202},[169,1201,1203,1205,1207],{"class":171,"line":1202},33,[169,1204,519],{"class":175},[169,1206,522],{"class":305},[169,1208,312],{"class":216},[169,1210,1212],{"class":171,"line":1211},34,[169,1213,318],{"class":216},[16,1215,1216,536],{},[533,1217,535],{},[160,1219,1222],{"className":1220,"code":1221,"language":542,"meta":165},[540],"LOG #7: ready\nLOG #8: ok\n",[35,1223,1221],{"__ignoreMap":165},[16,1225,1226,1227,1230,1231,1234,1235,1238],{},"这里 ",[35,1228,1229],{},"&printer"," 必须在 ",[35,1232,1233],{},"print_any"," 和 ",[35,1236,1237],{},"print_ok"," 使用期间一直有效。如果绑定后的回调会被保存到更久的地方，通常要考虑智能指针或更明确的生命周期管理。",[155,1240,1242],{"id":1241},"示例-4bind-和-lambda-的对比","示例 4：bind 和 Lambda 的对比",[16,1244,1245],{},"同一个参数适配任务，Lambda 往往更直观，因为参数名和调用关系都写得很清楚。",[160,1247,1249],{"className":162,"code":1248,"language":164,"meta":165,"style":165},"#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",[35,1250,1251,1257,1263,1267,1297,1301,1326,1330,1334,1342,1346,1350,1362,1374,1378,1382,1405,1430,1444,1449,1453,1491,1527,1531,1553,1576,1589,1593,1597,1633,1669,1673,1681],{"__ignoreMap":165},[169,1252,1253,1255],{"class":171,"line":172},[169,1254,176],{"class":175},[169,1256,180],{"class":179},[169,1258,1259,1261],{"class":171,"line":183},[169,1260,176],{"class":175},[169,1262,188],{"class":179},[169,1264,1265],{"class":171,"line":191},[169,1266,203],{"emptyLinePlaceholder":202},[169,1268,1269,1271,1274,1276,1278,1281,1283,1285,1288,1290,1292,1295],{"class":171,"line":199},[169,1270,242],{"class":175},[169,1272,1273],{"class":212}," weighted_sum",[169,1275,217],{"class":216},[169,1277,242],{"class":175},[169,1279,1280],{"class":235}," base",[169,1282,239],{"class":216},[169,1284,242],{"class":175},[169,1286,1287],{"class":235}," x",[169,1289,239],{"class":216},[169,1291,242],{"class":175},[169,1293,1294],{"class":235}," y",[169,1296,255],{"class":216},[169,1298,1299],{"class":171,"line":206},[169,1300,261],{"class":216},[169,1302,1303,1305,1308,1311,1314,1317,1320,1323],{"class":171,"line":258},[169,1304,519],{"class":175},[169,1306,1307],{"class":216}," base ",[169,1309,1310],{"class":175},"+",[169,1312,1313],{"class":216}," x ",[169,1315,1316],{"class":175},"*",[169,1318,1319],{"class":305}," 10",[169,1321,1322],{"class":175}," +",[169,1324,1325],{"class":216}," y;\n",[169,1327,1328],{"class":171,"line":264},[169,1329,318],{"class":216},[169,1331,1332],{"class":171,"line":315},[169,1333,203],{"emptyLinePlaceholder":202},[169,1335,1336,1338,1340],{"class":171,"line":321},[169,1337,242],{"class":175},[169,1339,331],{"class":212},[169,1341,334],{"class":216},[169,1343,1344],{"class":171,"line":326},[169,1345,261],{"class":216},[169,1347,1348],{"class":171,"line":337},[169,1349,346],{"class":345},[169,1351,1352,1354,1356,1358,1360],{"class":171,"line":342},[169,1353,352],{"class":175},[169,1355,223],{"class":212},[169,1357,226],{"class":216},[169,1359,359],{"class":212},[169,1361,362],{"class":216},[169,1363,1364,1366,1368,1370,1372],{"class":171,"line":349},[169,1365,352],{"class":175},[169,1367,223],{"class":212},[169,1369,226],{"class":216},[169,1371,359],{"class":212},[169,1373,376],{"class":216},[169,1375,1376],{"class":171,"line":365},[169,1377,203],{"emptyLinePlaceholder":202},[169,1379,1380],{"class":171,"line":379},[169,1381,416],{"class":345},[169,1383,1384,1386,1389,1391,1393,1395,1397,1400,1403],{"class":171,"line":384},[169,1385,422],{"class":175},[169,1387,1388],{"class":216}," by_bind ",[169,1390,428],{"class":175},[169,1392,223],{"class":212},[169,1394,226],{"class":216},[169,1396,43],{"class":212},[169,1398,1399],{"class":216},"(weighted_sum, ",[169,1401,1402],{"class":305},"100",[169,1404,443],{"class":216},[169,1406,1407,1409,1412,1414,1417,1419,1421,1423,1425,1427],{"class":171,"line":408},[169,1408,422],{"class":175},[169,1410,1411],{"class":216}," by_lambda ",[169,1413,428],{"class":175},[169,1415,1416],{"class":216}," [](",[169,1418,242],{"class":175},[169,1420,1287],{"class":235},[169,1422,239],{"class":216},[169,1424,242],{"class":175},[169,1426,1294],{"class":235},[169,1428,1429],{"class":216},") {\n",[169,1431,1432,1435,1437,1439,1441],{"class":171,"line":413},[169,1433,1434],{"class":175},"        return",[169,1436,1273],{"class":212},[169,1438,217],{"class":216},[169,1440,1402],{"class":305},[169,1442,1443],{"class":216},", x, y);\n",[169,1445,1446],{"class":171,"line":419},[169,1447,1448],{"class":216},"    };\n",[169,1450,1451],{"class":171,"line":446},[169,1452,203],{"emptyLinePlaceholder":202},[169,1454,1455,1457,1459,1461,1464,1466,1469,1471,1474,1476,1479,1481,1483,1485,1487,1489],{"class":171,"line":464},[169,1456,267],{"class":212},[169,1458,270],{"class":216},[169,1460,273],{"class":175},[169,1462,1463],{"class":179}," \"bind result = \"",[169,1465,284],{"class":175},[169,1467,1468],{"class":212}," by_bind",[169,1470,217],{"class":216},[169,1472,1473],{"class":305},"3",[169,1475,239],{"class":216},[169,1477,1478],{"class":305},"4",[169,1480,962],{"class":216},[169,1482,273],{"class":175},[169,1484,302],{"class":179},[169,1486,306],{"class":305},[169,1488,309],{"class":179},[169,1490,312],{"class":216},[169,1492,1493,1495,1497,1499,1502,1504,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525],{"class":171,"line":469},[169,1494,267],{"class":212},[169,1496,270],{"class":216},[169,1498,273],{"class":175},[169,1500,1501],{"class":179}," \"lambda result = \"",[169,1503,284],{"class":175},[169,1505,1506],{"class":212}," by_lambda",[169,1508,217],{"class":216},[169,1510,1473],{"class":305},[169,1512,239],{"class":216},[169,1514,1478],{"class":305},[169,1516,962],{"class":216},[169,1518,273],{"class":175},[169,1520,302],{"class":179},[169,1522,306],{"class":305},[169,1524,309],{"class":179},[169,1526,312],{"class":216},[169,1528,1529],{"class":171,"line":498},[169,1530,203],{"emptyLinePlaceholder":202},[169,1532,1533,1535,1538,1540,1542,1544,1546,1548,1550],{"class":171,"line":511},[169,1534,422],{"class":175},[169,1536,1537],{"class":216}," swapped_bind ",[169,1539,428],{"class":175},[169,1541,223],{"class":212},[169,1543,226],{"class":216},[169,1545,43],{"class":212},[169,1547,1399],{"class":216},[169,1549,1402],{"class":305},[169,1551,1552],{"class":216},", _2, _1);\n",[169,1554,1555,1557,1560,1562,1564,1566,1568,1570,1572,1574],{"class":171,"line":516},[169,1556,422],{"class":175},[169,1558,1559],{"class":216}," swapped_lambda ",[169,1561,428],{"class":175},[169,1563,1416],{"class":216},[169,1565,242],{"class":175},[169,1567,1287],{"class":235},[169,1569,239],{"class":216},[169,1571,242],{"class":175},[169,1573,1294],{"class":235},[169,1575,1429],{"class":216},[169,1577,1578,1580,1582,1584,1586],{"class":171,"line":527},[169,1579,1434],{"class":175},[169,1581,1273],{"class":212},[169,1583,217],{"class":216},[169,1585,1402],{"class":305},[169,1587,1588],{"class":216},", y, x);\n",[169,1590,1591],{"class":171,"line":1096},[169,1592,1448],{"class":216},[169,1594,1595],{"class":171,"line":1127},[169,1596,203],{"emptyLinePlaceholder":202},[169,1598,1599,1601,1603,1605,1608,1610,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631],{"class":171,"line":1145},[169,1600,267],{"class":212},[169,1602,270],{"class":216},[169,1604,273],{"class":175},[169,1606,1607],{"class":179}," \"swapped bind result = \"",[169,1609,284],{"class":175},[169,1611,1612],{"class":212}," swapped_bind",[169,1614,217],{"class":216},[169,1616,1473],{"class":305},[169,1618,239],{"class":216},[169,1620,1478],{"class":305},[169,1622,962],{"class":216},[169,1624,273],{"class":175},[169,1626,302],{"class":179},[169,1628,306],{"class":305},[169,1630,309],{"class":179},[169,1632,312],{"class":216},[169,1634,1635,1637,1639,1641,1644,1646,1649,1651,1653,1655,1657,1659,1661,1663,1665,1667],{"class":171,"line":1150},[169,1636,267],{"class":212},[169,1638,270],{"class":216},[169,1640,273],{"class":175},[169,1642,1643],{"class":179}," \"swapped lambda result = \"",[169,1645,284],{"class":175},[169,1647,1648],{"class":212}," swapped_lambda",[169,1650,217],{"class":216},[169,1652,1473],{"class":305},[169,1654,239],{"class":216},[169,1656,1478],{"class":305},[169,1658,962],{"class":216},[169,1660,273],{"class":175},[169,1662,302],{"class":179},[169,1664,306],{"class":305},[169,1666,309],{"class":179},[169,1668,312],{"class":216},[169,1670,1671],{"class":171,"line":1184},[169,1672,203],{"emptyLinePlaceholder":202},[169,1674,1675,1677,1679],{"class":171,"line":1197},[169,1676,519],{"class":175},[169,1678,522],{"class":305},[169,1680,312],{"class":216},[169,1682,1683],{"class":171,"line":1202},[169,1684,318],{"class":216},[16,1686,1687,536],{},[533,1688,535],{},[160,1690,1693],{"className":1691,"code":1692,"language":542,"meta":165},[540],"bind result = 134\nlambda result = 134\nswapped bind result = 143\nswapped lambda result = 143\n",[35,1694,1692],{"__ignoreMap":165},[155,1696,1698],{"id":1697},"示例-5bind-默认拷贝参数需要引用时用-stdref","示例 5：bind 默认拷贝参数，需要引用时用 std::ref",[16,1700,1701,1703,1704,1707,1708,1711],{},[35,1702,5],{}," 保存普通参数时默认拷贝。如果你要绑定引用，必须显式使用 ",[35,1705,1706],{},"std::ref"," 或 ",[35,1709,1710],{},"std::cref","。",[160,1713,1715],{"className":162,"code":1714,"language":164,"meta":165,"style":165},"#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",[35,1716,1717,1723,1729,1733,1757,1761,1772,1798,1802,1806,1814,1818,1822,1835,1839,1843,1866,1874,1899,1903,1936,1943,1968,1972,1980],{"__ignoreMap":165},[169,1718,1719,1721],{"class":171,"line":172},[169,1720,176],{"class":175},[169,1722,180],{"class":179},[169,1724,1725,1727],{"class":171,"line":183},[169,1726,176],{"class":175},[169,1728,188],{"class":179},[169,1730,1731],{"class":171,"line":191},[169,1732,203],{"emptyLinePlaceholder":202},[169,1734,1735,1737,1740,1742,1745,1748,1750,1752,1755],{"class":171,"line":199},[169,1736,209],{"class":175},[169,1738,1739],{"class":212}," add_to",[169,1741,217],{"class":216},[169,1743,1744],{"class":175},"int&",[169,1746,1747],{"class":235}," total",[169,1749,239],{"class":216},[169,1751,242],{"class":175},[169,1753,1754],{"class":235}," value",[169,1756,255],{"class":216},[169,1758,1759],{"class":171,"line":206},[169,1760,261],{"class":216},[169,1762,1763,1766,1769],{"class":171,"line":258},[169,1764,1765],{"class":216},"    total ",[169,1767,1768],{"class":175},"+=",[169,1770,1771],{"class":216}," value;\n",[169,1773,1774,1776,1778,1780,1783,1785,1788,1790,1792,1794,1796],{"class":171,"line":264},[169,1775,267],{"class":212},[169,1777,270],{"class":216},[169,1779,273],{"class":175},[169,1781,1782],{"class":179}," \"inside total = \"",[169,1784,284],{"class":175},[169,1786,1787],{"class":216}," total ",[169,1789,273],{"class":175},[169,1791,302],{"class":179},[169,1793,306],{"class":305},[169,1795,309],{"class":179},[169,1797,312],{"class":216},[169,1799,1800],{"class":171,"line":315},[169,1801,318],{"class":216},[169,1803,1804],{"class":171,"line":321},[169,1805,203],{"emptyLinePlaceholder":202},[169,1807,1808,1810,1812],{"class":171,"line":326},[169,1809,242],{"class":175},[169,1811,331],{"class":212},[169,1813,334],{"class":216},[169,1815,1816],{"class":171,"line":337},[169,1817,261],{"class":216},[169,1819,1820],{"class":171,"line":342},[169,1821,346],{"class":345},[169,1823,1824,1827,1829,1831,1833],{"class":171,"line":349},[169,1825,1826],{"class":175},"    int",[169,1828,1787],{"class":216},[169,1830,428],{"class":175},[169,1832,522],{"class":305},[169,1834,312],{"class":216},[169,1836,1837],{"class":171,"line":365},[169,1838,203],{"emptyLinePlaceholder":202},[169,1840,1841],{"class":171,"line":379},[169,1842,416],{"class":345},[169,1844,1845,1847,1850,1852,1854,1856,1858,1861,1864],{"class":171,"line":384},[169,1846,422],{"class":175},[169,1848,1849],{"class":216}," add_copy ",[169,1851,428],{"class":175},[169,1853,223],{"class":212},[169,1855,226],{"class":216},[169,1857,43],{"class":212},[169,1859,1860],{"class":216},"(add_to, total, ",[169,1862,1863],{"class":305},"5",[169,1865,405],{"class":216},[169,1867,1868,1871],{"class":171,"line":408},[169,1869,1870],{"class":212},"    add_copy",[169,1872,1873],{"class":216},"();\n",[169,1875,1876,1878,1880,1882,1885,1887,1889,1891,1893,1895,1897],{"class":171,"line":413},[169,1877,267],{"class":212},[169,1879,270],{"class":216},[169,1881,273],{"class":175},[169,1883,1884],{"class":179}," \"outside after copy bind = \"",[169,1886,284],{"class":175},[169,1888,1787],{"class":216},[169,1890,273],{"class":175},[169,1892,302],{"class":179},[169,1894,306],{"class":305},[169,1896,309],{"class":179},[169,1898,312],{"class":216},[169,1900,1901],{"class":171,"line":419},[169,1902,203],{"emptyLinePlaceholder":202},[169,1904,1905,1907,1910,1912,1914,1916,1918,1921,1924,1926,1929,1932,1934],{"class":171,"line":446},[169,1906,422],{"class":175},[169,1908,1909],{"class":216}," add_ref ",[169,1911,428],{"class":175},[169,1913,223],{"class":212},[169,1915,226],{"class":216},[169,1917,43],{"class":212},[169,1919,1920],{"class":216},"(add_to, ",[169,1922,1923],{"class":212},"std",[169,1925,226],{"class":216},[169,1927,1928],{"class":212},"ref",[169,1930,1931],{"class":216},"(total), ",[169,1933,1863],{"class":305},[169,1935,405],{"class":216},[169,1937,1938,1941],{"class":171,"line":464},[169,1939,1940],{"class":212},"    add_ref",[169,1942,1873],{"class":216},[169,1944,1945,1947,1949,1951,1954,1956,1958,1960,1962,1964,1966],{"class":171,"line":469},[169,1946,267],{"class":212},[169,1948,270],{"class":216},[169,1950,273],{"class":175},[169,1952,1953],{"class":179}," \"outside after ref bind = \"",[169,1955,284],{"class":175},[169,1957,1787],{"class":216},[169,1959,273],{"class":175},[169,1961,302],{"class":179},[169,1963,306],{"class":305},[169,1965,309],{"class":179},[169,1967,312],{"class":216},[169,1969,1970],{"class":171,"line":498},[169,1971,203],{"emptyLinePlaceholder":202},[169,1973,1974,1976,1978],{"class":171,"line":511},[169,1975,519],{"class":175},[169,1977,522],{"class":305},[169,1979,312],{"class":216},[169,1981,1982],{"class":171,"line":516},[169,1983,318],{"class":216},[16,1985,1986,536],{},[533,1987,535],{},[160,1989,1992],{"className":1990,"code":1991,"language":542,"meta":165},[540],"inside total = 5\noutside after copy bind = 0\ninside total = 5\noutside after ref bind = 5\n",[35,1993,1991],{"__ignoreMap":165},[155,1995,1997,1998,2001],{"id":1996},"示例-6在成员函数中使用-this-绑定当前对象","示例 6：在成员函数中使用 ",[35,1999,2000],{},"this"," 绑定当前对象",[16,2003,2004,2005,2007,2008,2010,2011,2013,2014,2016],{},"前面的示例是在类外部创建对象，再把对象地址 ",[35,2006,1229],{}," 传给 ",[35,2009,5],{},"。如果 ",[35,2012,5],{}," 本身就在类的成员函数中使用，可以直接传入 ",[35,2015,2000],{},"，表示把成员函数绑定到当前对象。",[160,2018,2020],{"className":162,"code":2019,"language":164,"meta":165,"style":165},"#include \u003Cfunctional>\n#include \u003Ciostream>\n#include \u003Cstring>\n\nclass Robot\n{\n    std::string name_;\n\npublic:\n    explicit Robot(const std::string& name) : name_(name) {}\n\n    void on_message(int id, const std::string& text)\n    {\n        std::cout \u003C\u003C name_ \u003C\u003C \" #\" \u003C\u003C id \u003C\u003C \": \" \u003C\u003C text \u003C\u003C \"\\n\";\n    }\n\n    void demo()\n    {\n        using std::placeholders::_1;\n        using std::placeholders::_2;\n\n        auto callback = std::bind(&Robot::on_message, this, _1, _2);\n\n        callback(7, \"ready\");\n        callback(8, \"running\");\n    }\n};\n\nint main()\n{\n    Robot robot(\"Cyber\");\n    robot.demo();\n\n    return 0;\n}\n",[35,2021,2022,2028,2034,2040,2044,2051,2055,2062,2066,2070,2099,2103,2132,2136,2173,2177,2181,2190,2194,2207,2219,2223,2253,2257,2272,2287,2291,2295,2299,2307,2311,2326,2336,2340,2348],{"__ignoreMap":165},[169,2023,2024,2026],{"class":171,"line":172},[169,2025,176],{"class":175},[169,2027,180],{"class":179},[169,2029,2030,2032],{"class":171,"line":183},[169,2031,176],{"class":175},[169,2033,188],{"class":179},[169,2035,2036,2038],{"class":171,"line":191},[169,2037,176],{"class":175},[169,2039,196],{"class":179},[169,2041,2042],{"class":171,"line":199},[169,2043,203],{"emptyLinePlaceholder":202},[169,2045,2046,2048],{"class":171,"line":206},[169,2047,870],{"class":175},[169,2049,2050],{"class":212}," Robot\n",[169,2052,2053],{"class":171,"line":258},[169,2054,261],{"class":216},[169,2056,2057,2059],{"class":171,"line":264},[169,2058,267],{"class":212},[169,2060,2061],{"class":216},"::string name_;\n",[169,2063,2064],{"class":171,"line":315},[169,2065,203],{"emptyLinePlaceholder":202},[169,2067,2068],{"class":171,"line":321},[169,2069,893],{"class":175},[169,2071,2072,2074,2077,2079,2081,2083,2085,2087,2089,2091,2093,2096],{"class":171,"line":326},[169,2073,898],{"class":175},[169,2075,2076],{"class":212}," Robot",[169,2078,217],{"class":216},[169,2080,220],{"class":175},[169,2082,223],{"class":212},[169,2084,226],{"class":216},[169,2086,229],{"class":212},[169,2088,232],{"class":175},[169,2090,236],{"class":235},[169,2092,919],{"class":216},[169,2094,2095],{"class":212},"name_",[169,2097,2098],{"class":216},"(name) {}\n",[169,2100,2101],{"class":171,"line":337},[169,2102,203],{"emptyLinePlaceholder":202},[169,2104,2105,2107,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128,2130],{"class":171,"line":342},[169,2106,934],{"class":175},[169,2108,2109],{"class":212}," on_message",[169,2111,217],{"class":216},[169,2113,242],{"class":175},[169,2115,944],{"class":235},[169,2117,239],{"class":216},[169,2119,220],{"class":175},[169,2121,223],{"class":212},[169,2123,226],{"class":216},[169,2125,229],{"class":212},[169,2127,232],{"class":175},[169,2129,959],{"class":235},[169,2131,255],{"class":216},[169,2133,2134],{"class":171,"line":349},[169,2135,970],{"class":216},[169,2137,2138,2140,2142,2144,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171],{"class":171,"line":365},[169,2139,975],{"class":212},[169,2141,270],{"class":216},[169,2143,273],{"class":175},[169,2145,2146],{"class":216}," name_ ",[169,2148,273],{"class":175},[169,2150,987],{"class":179},[169,2152,284],{"class":175},[169,2154,992],{"class":216},[169,2156,273],{"class":175},[169,2158,997],{"class":179},[169,2160,284],{"class":175},[169,2162,1002],{"class":216},[169,2164,273],{"class":175},[169,2166,302],{"class":179},[169,2168,306],{"class":305},[169,2170,309],{"class":179},[169,2172,312],{"class":216},[169,2174,2175],{"class":171,"line":379},[169,2176,1017],{"class":216},[169,2178,2179],{"class":171,"line":384},[169,2180,203],{"emptyLinePlaceholder":202},[169,2182,2183,2185,2188],{"class":171,"line":408},[169,2184,934],{"class":175},[169,2186,2187],{"class":212}," demo",[169,2189,334],{"class":216},[169,2191,2192],{"class":171,"line":413},[169,2193,970],{"class":216},[169,2195,2196,2199,2201,2203,2205],{"class":171,"line":419},[169,2197,2198],{"class":175},"        using",[169,2200,223],{"class":212},[169,2202,226],{"class":216},[169,2204,359],{"class":212},[169,2206,362],{"class":216},[169,2208,2209,2211,2213,2215,2217],{"class":171,"line":446},[169,2210,2198],{"class":175},[169,2212,223],{"class":212},[169,2214,226],{"class":216},[169,2216,359],{"class":212},[169,2218,376],{"class":216},[169,2220,2221],{"class":171,"line":464},[169,2222,203],{"emptyLinePlaceholder":202},[169,2224,2225,2228,2231,2233,2235,2237,2239,2241,2243,2246,2249,2251],{"class":171,"line":469},[169,2226,2227],{"class":175},"        auto",[169,2229,2230],{"class":216}," callback ",[169,2232,428],{"class":175},[169,2234,223],{"class":212},[169,2236,226],{"class":216},[169,2238,43],{"class":212},[169,2240,217],{"class":216},[169,2242,232],{"class":175},[169,2244,2245],{"class":212},"Robot",[169,2247,2248],{"class":216},"::on_message, ",[169,2250,2000],{"class":305},[169,2252,443],{"class":216},[169,2254,2255],{"class":171,"line":498},[169,2256,203],{"emptyLinePlaceholder":202},[169,2258,2259,2262,2264,2266,2268,2270],{"class":171,"line":511},[169,2260,2261],{"class":212},"        callback",[169,2263,217],{"class":216},[169,2265,1135],{"class":305},[169,2267,239],{"class":216},[169,2269,1140],{"class":179},[169,2271,405],{"class":216},[169,2273,2274,2276,2278,2280,2282,2285],{"class":171,"line":516},[169,2275,2261],{"class":212},[169,2277,217],{"class":216},[169,2279,1192],{"class":305},[169,2281,239],{"class":216},[169,2283,2284],{"class":179},"\"running\"",[169,2286,405],{"class":216},[169,2288,2289],{"class":171,"line":527},[169,2290,1017],{"class":216},[169,2292,2293],{"class":171,"line":1096},[169,2294,1022],{"class":216},[169,2296,2297],{"class":171,"line":1127},[169,2298,203],{"emptyLinePlaceholder":202},[169,2300,2301,2303,2305],{"class":171,"line":1145},[169,2302,242],{"class":175},[169,2304,331],{"class":212},[169,2306,334],{"class":216},[169,2308,2309],{"class":171,"line":1150},[169,2310,261],{"class":216},[169,2312,2313,2316,2319,2321,2324],{"class":171,"line":1184},[169,2314,2315],{"class":216},"    Robot ",[169,2317,2318],{"class":212},"robot",[169,2320,217],{"class":216},[169,2322,2323],{"class":179},"\"Cyber\"",[169,2325,405],{"class":216},[169,2327,2328,2331,2334],{"class":171,"line":1197},[169,2329,2330],{"class":216},"    robot.",[169,2332,2333],{"class":212},"demo",[169,2335,1873],{"class":216},[169,2337,2338],{"class":171,"line":1202},[169,2339,203],{"emptyLinePlaceholder":202},[169,2341,2342,2344,2346],{"class":171,"line":1211},[169,2343,519],{"class":175},[169,2345,522],{"class":305},[169,2347,312],{"class":216},[169,2349,2351],{"class":171,"line":2350},35,[169,2352,318],{"class":216},[16,2354,2355,536],{},[533,2356,535],{},[160,2358,2361],{"className":2359,"code":2360,"language":542,"meta":165},[540],"Cyber #7: ready\nCyber #8: running\n",[35,2362,2360],{"__ignoreMap":165},[16,2364,2365],{},"这里最重要的是：",[160,2367,2369],{"className":162,"code":2368,"language":164,"meta":165,"style":165},"auto callback = std::bind(&Robot::on_message, this, _1, _2);\n",[35,2370,2371],{"__ignoreMap":165},[169,2372,2373,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396],{"class":171,"line":172},[169,2374,2375],{"class":175},"auto",[169,2377,2230],{"class":216},[169,2379,428],{"class":175},[169,2381,223],{"class":212},[169,2383,226],{"class":216},[169,2385,43],{"class":212},[169,2387,217],{"class":216},[169,2389,232],{"class":175},[169,2391,2245],{"class":212},[169,2393,2248],{"class":216},[169,2395,2000],{"class":305},[169,2397,443],{"class":216},[16,2399,2400],{},"把它拆开看：",[81,2402,2403,2412],{},[84,2404,2405],{},[87,2406,2407,2410],{},[90,2408,2409],{"align":92},"参数",[90,2411,96],{"align":92},[98,2413,2414,2424,2433,2445],{},[87,2415,2416,2421],{},[103,2417,2418],{"align":92},[35,2419,2420],{},"&Robot::on_message",[103,2422,2423],{"align":92},"要调用的成员函数",[87,2425,2426,2430],{},[103,2427,2428],{"align":92},[35,2429,2000],{},[103,2431,2432],{"align":92},"调用这个成员函数的当前对象",[87,2434,2435,2439],{},[103,2436,2437],{"align":92},[35,2438,58],{},[103,2440,2441,2444],{"align":92},[35,2442,2443],{},"callback()"," 调用时传入的第一个参数",[87,2446,2447,2451],{},[103,2448,2449],{"align":92},[35,2450,62],{},[103,2452,2453,2455],{"align":92},[35,2454,2443],{}," 调用时传入的第二个参数",[16,2457,2458,2459,2461,2462,2464,2465,2467],{},"非静态成员函数不能脱离对象单独调用。",[35,2460,2420],{}," 只说明了“要调用哪个成员函数”，还必须告诉 ",[35,2463,5],{},"“在哪个 ",[35,2466,2245],{}," 对象上调用”。",[16,2469,2470],{},"在类外部，可以写：",[160,2472,2474],{"className":162,"code":2473,"language":164,"meta":165,"style":165},"std::bind(&Robot::on_message, &robot, _1, _2);\n",[35,2475,2476],{"__ignoreMap":165},[169,2477,2478,2480,2482,2484,2486,2488,2490,2492,2494],{"class":171,"line":172},[169,2479,1923],{"class":212},[169,2481,226],{"class":216},[169,2483,43],{"class":212},[169,2485,217],{"class":216},[169,2487,232],{"class":175},[169,2489,2245],{"class":212},[169,2491,2248],{"class":216},[169,2493,232],{"class":175},[169,2495,2496],{"class":216},"robot, _1, _2);\n",[16,2498,2499,2500,2502,2503,2505],{},"而在 ",[35,2501,2245],{}," 自己的成员函数内部，",[35,2504,2000],{}," 就是当前对象的指针，所以可以直接写：",[160,2507,2509],{"className":162,"code":2508,"language":164,"meta":165,"style":165},"std::bind(&Robot::on_message, this, _1, _2);\n",[35,2510,2511],{"__ignoreMap":165},[169,2512,2513,2515,2517,2519,2521,2523,2525,2527,2529],{"class":171,"line":172},[169,2514,1923],{"class":212},[169,2516,226],{"class":216},[169,2518,43],{"class":212},[169,2520,217],{"class":216},[169,2522,232],{"class":175},[169,2524,2245],{"class":212},[169,2526,2248],{"class":216},[169,2528,2000],{"class":305},[169,2530,443],{"class":216},[16,2532,2533],{},"例如：",[160,2535,2537],{"className":162,"code":2536,"language":164,"meta":165,"style":165},"Robot robot(\"Cyber\");\nrobot.demo();\n",[35,2538,2539,2552],{"__ignoreMap":165},[169,2540,2541,2543,2546,2548,2550],{"class":171,"line":172},[169,2542,2245],{"class":212},[169,2544,2545],{"class":212}," robot",[169,2547,217],{"class":216},[169,2549,2323],{"class":179},[169,2551,405],{"class":216},[169,2553,2554,2557,2559],{"class":171,"line":183},[169,2555,2556],{"class":216},"robot.",[169,2558,2333],{"class":212},[169,2560,1873],{"class":216},[16,2562,2563,2564,2567,2568,2571,2572,2574,2575,1711],{},"进入 ",[35,2565,2566],{},"robot.demo()"," 后，",[35,2569,2570],{},"demo()"," 内部的 ",[35,2573,2000],{}," 就指向 ",[35,2576,2318],{},[16,2578,2579],{},"因此：",[160,2581,2583],{"className":162,"code":2582,"language":164,"meta":165,"style":165},"callback(7, \"ready\");\n",[35,2584,2585],{"__ignoreMap":165},[169,2586,2587,2590,2592,2594,2596,2598],{"class":171,"line":172},[169,2588,2589],{"class":212},"callback",[169,2591,217],{"class":216},[169,2593,1135],{"class":305},[169,2595,239],{"class":216},[169,2597,1140],{"class":179},[169,2599,405],{"class":216},[16,2601,2602],{},"可以近似理解成：",[160,2604,2606],{"className":162,"code":2605,"language":164,"meta":165,"style":165},"this->on_message(7, \"ready\");\n",[35,2607,2608],{"__ignoreMap":165},[169,2609,2610,2612,2615,2618,2620,2622,2624,2626],{"class":171,"line":172},[169,2611,2000],{"class":305},[169,2613,2614],{"class":216},"->",[169,2616,2617],{"class":212},"on_message",[169,2619,217],{"class":216},[169,2621,1135],{"class":305},[169,2623,239],{"class":216},[169,2625,1140],{"class":179},[169,2627,405],{"class":216},[16,2629,2630,2631,2633],{},"如果当前对象就是 ",[35,2632,2318],{},"，也就相当于：",[160,2635,2637],{"className":162,"code":2636,"language":164,"meta":165,"style":165},"robot.on_message(7, \"ready\");\n",[35,2638,2639],{"__ignoreMap":165},[169,2640,2641,2643,2645,2647,2649,2651,2653],{"class":171,"line":172},[169,2642,2556],{"class":216},[169,2644,2617],{"class":212},[169,2646,217],{"class":216},[169,2648,1135],{"class":305},[169,2650,239],{"class":216},[169,2652,1140],{"class":179},[169,2654,405],{"class":216},[16,2656,2657],{},"所以这类写法可以记成：",[160,2659,2661],{"className":162,"code":2660,"language":164,"meta":165,"style":165},"std::bind(&类名::成员函数, this, 参数...);\n",[35,2662,2663],{"__ignoreMap":165},[169,2664,2665,2667,2669,2671,2673,2675,2678,2680],{"class":171,"line":172},[169,2666,1923],{"class":212},[169,2668,226],{"class":216},[169,2670,43],{"class":212},[169,2672,217],{"class":216},[169,2674,232],{"class":175},[169,2676,2677],{"class":216},"类名::成员函数, ",[169,2679,2000],{"class":305},[169,2681,2682],{"class":216},", 参数...);\n",[16,2684,2685,2686,2688],{},"其中第二个参数 ",[35,2687,2000],{}," 的作用是：",[2690,2691,2692],"blockquote",{},[16,2693,2694],{},[533,2695,2696,2697,2699],{},"告诉 ",[35,2698,5],{},"：以后调用这个成员函数时，就在当前这个对象上调用。",[16,2701,2702],{},"这也是 ROS2 和 Boost.Asio 中很常见的写法，例如：",[160,2704,2706],{"className":162,"code":2705,"language":164,"meta":165,"style":165},"std::bind(&MyNode::callback, this, _1)\n",[35,2707,2708],{"__ignoreMap":165},[169,2709,2710,2712,2714,2716,2718,2720,2723,2726,2728],{"class":171,"line":172},[169,2711,1923],{"class":212},[169,2713,226],{"class":216},[169,2715,43],{"class":212},[169,2717,217],{"class":216},[169,2719,232],{"class":175},[169,2721,2722],{"class":212},"MyNode",[169,2724,2725],{"class":216},"::callback, ",[169,2727,2000],{"class":305},[169,2729,2730],{"class":216},", _1)\n",[16,2732,2733,2734,2737,2738,2740,2741,1711],{},"它表示把 ",[35,2735,2736],{},"MyNode::callback"," 绑定到当前这个 ",[35,2739,2722],{}," 对象上，再把调用时的第一个参数传给 ",[35,2742,2589],{},[16,2744,2745,2746,2748,2749,2751],{},"需要注意，",[35,2747,2000],{}," 本质上是一个指针。绑定后的回调如果活得比当前对象更久，对象销毁后再调用回调，就可能访问已经失效的 ",[35,2750,2000],{},"，因此异步回调中仍然要注意对象生命周期。",[12,2753,2754],{"id":2754},"关键语法解释",[81,2756,2757,2769],{},[84,2758,2759],{},[87,2760,2761,2763,2766],{},[90,2762,93],{"align":92},[90,2764,2765],{"align":92},"说明",[90,2767,2768],{"align":92},"注意事项",[98,2770,2771,2785,2797,2811,2824,2836],{},[87,2772,2773,2777,2780],{},[103,2774,2775],{"align":92},[35,2776,58],{},[103,2778,2779],{"align":92},"调用新函数时传入的第一个参数",[103,2781,2782,2783],{"align":92},"来自 ",[35,2784,78],{},[87,2786,2787,2791,2794],{},[103,2788,2789],{"align":92},[35,2790,62],{},[103,2792,2793],{"align":92},"调用新函数时传入的第二个参数",[103,2795,2796],{"align":92},"可以用来调整顺序",[87,2798,2799,2802,2808],{},[103,2800,2801],{"align":92},"固定值",[103,2803,2804,2805,2807],{"align":92},"直接写在 ",[35,2806,43],{}," 参数里",[103,2809,2810],{"align":92},"默认会被拷贝保存",[87,2812,2813,2818,2821],{},[103,2814,2815],{"align":92},[35,2816,2817],{},"&Class::method",[103,2819,2820],{"align":92},"成员函数指针",[103,2822,2823],{"align":92},"后面还要绑定对象",[87,2825,2826,2830,2833],{},[103,2827,2828],{"align":92},[35,2829,2000],{},[103,2831,2832],{"align":92},"成员函数内部的当前对象指针",[103,2834,2835],{"align":92},"常作为绑定成员函数时的第二个参数",[87,2837,2838,2843,2849],{},[103,2839,2840],{"align":92},[35,2841,2842],{},"std::ref(x)",[103,2844,2845,2846],{"align":92},"按引用绑定 ",[35,2847,2848],{},"x",[103,2850,2851,2852,2854],{"align":92},"不写 ",[35,2853,1706],{}," 通常会拷贝",[12,2856,2858],{"id":2857},"bind-和-lambda-怎么选","bind 和 Lambda 怎么选",[81,2860,2861,2871],{},[84,2862,2863],{},[87,2864,2865,2868],{},[90,2866,2867],{"align":92},"场景",[90,2869,2870],{"align":92},"推荐",[98,2872,2873,2884,2892,2902,2909],{},[87,2874,2875,2878],{},[103,2876,2877],{"align":92},"简单固定参数",[103,2879,2880,2881,2883],{"align":92},"Lambda 或 ",[35,2882,43],{}," 都可以",[87,2885,2886,2889],{},[103,2887,2888],{"align":92},"参数关系需要读得很清楚",[103,2890,2891],{"align":92},"Lambda",[87,2893,2894,2897],{},[103,2895,2896],{"align":92},"绑定成员函数给旧接口",[103,2898,2899,2901],{"align":92},[35,2900,43],{}," 很常见，也可以用 Lambda",[87,2903,2904,2907],{},[103,2905,2906],{"align":92},"需要复杂逻辑、条件判断",[103,2908,2891],{"align":92},[87,2910,2911,2914],{},[103,2912,2913],{"align":92},"阅读旧代码或 ROS2\u002FBoost.Asio 示例",[103,2915,2916,2917],{"align":92},"必须看懂 ",[35,2918,43],{},[16,2920,2921,2922,1711],{},"一句话：新代码优先考虑 Lambda；遇到已有接口适配、旧项目代码、成员函数回调时，要能熟练读懂 ",[35,2923,5],{},[12,2925,2926],{"id":2926},"常见错误",[2928,2929,2930,2935,2943,2946,2949],"ol",{},[23,2931,2932,2933,1711],{},"忘记占位符来自 ",[35,2934,78],{},[23,2936,2937,2938,59,2940,2942],{},"把 ",[35,2939,58],{},[35,2941,62],{}," 的顺序看反，导致实参顺序错误。",[23,2944,2945],{},"绑定成员函数时忘记绑定对象。",[23,2947,2948],{},"绑定对象指针后，对象先被销毁，回调还在使用。",[23,2950,2951,2952,2954,2955,1711],{},"以为 ",[35,2953,43],{}," 默认按引用保存参数。默认是拷贝，需要引用时用 ",[35,2956,1706],{},[12,2958,2959],{"id":2959},"使用建议",[2928,2961,2962,2965,2971,2974,2981],{},[23,2963,2964],{},"新代码中，参数适配优先尝试 Lambda。",[23,2966,2967,2968,1711],{},"读 ROS2、Boost.Asio、旧项目代码时，要能看懂 ",[35,2969,2970],{},"std::bind(&Class::method, this, _1, _2)",[23,2972,2973],{},"绑定成员函数时最先考虑对象生命周期。",[23,2975,2976,2977,1707,2979,1711],{},"需要引用语义时明确写 ",[35,2978,1706],{},[35,2980,1710],{},[23,2982,2983,2984,2986],{},"不要为了使用 ",[35,2985,43],{}," 写出难读的占位符组合，清晰比炫技重要。",[12,2988,2989],{"id":2989},"小结",[20,2991,2992,2997,3004,3010,3017,3023],{},[23,2993,2994,2996],{},[35,2995,5],{}," 用来固定参数、调整参数顺序、绑定成员函数。",[23,2998,2999,59,3001,3003],{},[35,3000,58],{},[35,3002,62],{}," 表示调用新可调用对象时传入的参数位置。",[23,3005,3006,3007,3009],{},"成员函数中可以把 ",[35,3008,2000],{}," 作为第二个参数，表示把成员函数绑定到当前对象。",[23,3011,3012,3014,3015,1711],{},[35,3013,43],{}," 默认拷贝绑定参数，需要引用时用 ",[35,3016,1706],{},[23,3018,3019,3020,3022],{},"现代 C++ 中很多 ",[35,3021,43],{}," 用法可以用 Lambda 替代。",[23,3024,3025,3026,3028],{},"理解 ",[35,3027,43],{}," 对阅读 ROS2、Boost.Asio 和旧 C++ 项目很有帮助。",[3030,3031,3032],"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":165,"searchDepth":183,"depth":183,"links":3034},[3035,3036,3037,3046,3047,3048,3049,3050],{"id":14,"depth":183,"text":14},{"id":50,"depth":183,"text":50},{"id":153,"depth":183,"text":153,"children":3038},[3039,3040,3041,3042,3043,3044],{"id":157,"depth":191,"text":158},{"id":547,"depth":191,"text":548},{"id":831,"depth":191,"text":832},{"id":1241,"depth":191,"text":1242},{"id":1697,"depth":191,"text":1698},{"id":1996,"depth":191,"text":3045},"示例 6：在成员函数中使用 this 绑定当前对象",{"id":2754,"depth":183,"text":2754},{"id":2857,"depth":183,"text":2858},{"id":2926,"depth":183,"text":2926},{"id":2959,"depth":183,"text":2959},{"id":2989,"depth":183,"text":2989},"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":165},"wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","iR7X1xQmwoUzHzCuyHuBtgGrU4i3uCLlKS3nArlEi9k",[3064,3071,3077,3083,3089,3095,3101,3107,3113,3119,3125,3131,3137,3143,3149,3155,3161,3167,3173,3179,3185,3191,3197,3203,3209,3215,3221,3227,3233,3239,3245,3251,3257,3263,3269,3275,3281,3287,3293,3299,3304,3310,3316,3322,3328,3334,3340,3346,3352,3358,3364,3370,3372,3378,3384,3390,3396,3402,3408,3414,3420,3426,3432,3438,3444,3450,3456,3462,3468,3474,3480,3486,3492,3498,3504,3510,3516,3522,3528,3534,3540,3546,3552,3558,3564,3570,3576,3582,3588,3594,3600,3606],{"path":3065,"stem":3066,"title":3067,"authors":3068,"date":3052,"chapterOrder":3069,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3072,"stem":3073,"title":3074,"authors":3075,"date":3052,"chapterOrder":3076,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","wiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基础初识",[7],"0200",{"path":3078,"stem":3079,"title":3080,"authors":3081,"date":3052,"chapterOrder":3082,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3084,"stem":3085,"title":3086,"authors":3087,"date":3052,"chapterOrder":3088,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","wiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","输入输出",[7],"0400",{"path":3090,"stem":3091,"title":3092,"authors":3093,"date":3052,"chapterOrder":3094,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","wiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","运算符",[7],"0500",{"path":3096,"stem":3097,"title":3098,"authors":3099,"date":3052,"chapterOrder":3100,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","wiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程结构",[7],"0600",{"path":3102,"stem":3103,"title":3104,"authors":3105,"date":3052,"chapterOrder":3106,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","wiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","数组",[7],"0700",{"path":3108,"stem":3109,"title":3110,"authors":3111,"date":3052,"chapterOrder":3112,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函数与头文件",[7],"0800",{"path":3114,"stem":3115,"title":3116,"authors":3117,"date":3052,"chapterOrder":3118,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指针",[7],"0900",{"path":3120,"stem":3121,"title":3122,"authors":3123,"date":3052,"chapterOrder":3124,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","wiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","结构体与共用体",[7],"1000",{"path":3126,"stem":3127,"title":3128,"authors":3129,"date":3052,"chapterOrder":3130,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3132,"stem":3133,"title":3134,"authors":3135,"date":3052,"chapterOrder":3136,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","wiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用",[7],"1200",{"path":3138,"stem":3139,"title":3140,"authors":3141,"date":3052,"chapterOrder":3142,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","wiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","函数提高",[7],"1300",{"path":3144,"stem":3145,"title":3146,"authors":3147,"date":3052,"chapterOrder":3148,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","wiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空间",[7],"1350",{"path":3150,"stem":3151,"title":3152,"authors":3153,"date":3052,"chapterOrder":3154,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封装",[7],"1400-0100",{"path":3156,"stem":3157,"title":3158,"authors":3159,"date":3052,"chapterOrder":3160,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3162,"stem":3163,"title":3164,"authors":3165,"date":3052,"chapterOrder":3166,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3168,"stem":3169,"title":3170,"authors":3171,"date":3052,"chapterOrder":3172,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3174,"stem":3175,"title":3176,"authors":3177,"date":3052,"chapterOrder":3178,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","继承",[7],"1400-0500",{"path":3180,"stem":3181,"title":3182,"authors":3183,"date":3052,"chapterOrder":3184,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多态",[7],"1400-0600",{"path":3186,"stem":3187,"title":3188,"authors":3189,"date":3052,"chapterOrder":3190,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","wiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","类和对象",[7],"1400",{"path":3192,"stem":3193,"title":3194,"authors":3195,"date":3052,"chapterOrder":3196,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","函数指针",[7],"1450",{"path":3198,"stem":3199,"title":3200,"authors":3201,"date":3052,"chapterOrder":3202,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","wiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作",[7],"1500",{"path":3204,"stem":3205,"title":3206,"authors":3207,"date":3052,"chapterOrder":3208,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3210,"stem":3211,"title":3212,"authors":3213,"date":3052,"chapterOrder":3214,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板",[7],"1700",{"path":3216,"stem":3217,"title":3218,"authors":3219,"date":3052,"chapterOrder":3220,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3222,"stem":3223,"title":3224,"authors":3225,"date":3052,"chapterOrder":3226,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3228,"stem":3229,"title":3230,"authors":3231,"date":3052,"chapterOrder":3232,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3234,"stem":3235,"title":3236,"authors":3237,"date":3052,"chapterOrder":3238,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3240,"stem":3241,"title":3242,"authors":3243,"date":3052,"chapterOrder":3244,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3246,"stem":3247,"title":3248,"authors":3249,"date":3052,"chapterOrder":3250,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3252,"stem":3253,"title":3254,"authors":3255,"date":3052,"chapterOrder":3256,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3258,"stem":3259,"title":3260,"authors":3261,"date":3052,"chapterOrder":3262,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3264,"stem":3265,"title":3266,"authors":3267,"date":3052,"chapterOrder":3268,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3270,"stem":3271,"title":3272,"authors":3273,"date":3052,"chapterOrder":3274,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3276,"stem":3277,"title":3278,"authors":3279,"date":3052,"chapterOrder":3280,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3282,"stem":3283,"title":3284,"authors":3285,"date":3052,"chapterOrder":3286,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法",[7],"1800-1200",{"path":3288,"stem":3289,"title":3290,"authors":3291,"date":3052,"chapterOrder":3292,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","wiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高编程",[7],"1800",{"path":3294,"stem":3295,"title":3296,"authors":3297,"date":3052,"chapterOrder":3298,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","wiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++类型转换",[7],"1900",{"path":3300,"stem":3301,"title":2375,"authors":3302,"date":3052,"chapterOrder":3303,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto",[7],"2000-0100",{"path":3305,"stem":3306,"title":3307,"authors":3308,"date":3052,"chapterOrder":3309,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr",[7],"2000-0200",{"path":3311,"stem":3312,"title":3313,"authors":3314,"date":3052,"chapterOrder":3315,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using",[7],"2000-0300",{"path":3317,"stem":3318,"title":3319,"authors":3320,"date":3052,"chapterOrder":3321,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3323,"stem":3324,"title":3325,"authors":3326,"date":3052,"chapterOrder":3327,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3329,"stem":3330,"title":3331,"authors":3332,"date":3052,"chapterOrder":3333,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3335,"stem":3336,"title":3337,"authors":3338,"date":3052,"chapterOrder":3339,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr",[7],"2000-0700",{"path":3341,"stem":3342,"title":3343,"authors":3344,"date":3052,"chapterOrder":3345,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII",[7],"2000-0800",{"path":3347,"stem":3348,"title":3349,"authors":3350,"date":3052,"chapterOrder":3351,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","智能指针",[7],"2000-0900",{"path":3353,"stem":3354,"title":3355,"authors":3356,"date":3052,"chapterOrder":3357,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3359,"stem":3360,"title":3361,"authors":3362,"date":3052,"chapterOrder":3363,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3365,"stem":3366,"title":3367,"authors":3368,"date":3052,"chapterOrder":3369,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function",[7],"2000-1200",{"path":3059,"stem":3061,"title":5,"authors":3371,"date":3052,"chapterOrder":3051,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},[7],{"path":3373,"stem":3374,"title":3375,"authors":3376,"date":3052,"chapterOrder":3377,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3379,"stem":3380,"title":3381,"authors":3382,"date":3052,"chapterOrder":3383,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3385,"stem":3386,"title":3387,"authors":3388,"date":3052,"chapterOrder":3389,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3391,"stem":3392,"title":3393,"authors":3394,"date":3052,"chapterOrder":3395,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3397,"stem":3398,"title":3399,"authors":3400,"date":3052,"chapterOrder":3401,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3403,"stem":3404,"title":3405,"authors":3406,"date":3052,"chapterOrder":3407,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3409,"stem":3410,"title":3411,"authors":3412,"date":3052,"chapterOrder":3413,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3415,"stem":3416,"title":3417,"authors":3418,"date":3052,"chapterOrder":3419,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3421,"stem":3422,"title":3423,"authors":3424,"date":3052,"chapterOrder":3425,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3427,"stem":3428,"title":3429,"authors":3430,"date":3052,"chapterOrder":3431,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3433,"stem":3434,"title":3435,"authors":3436,"date":3052,"chapterOrder":3437,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3439,"stem":3440,"title":3441,"authors":3442,"date":3052,"chapterOrder":3443,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3445,"stem":3446,"title":3447,"authors":3448,"date":3052,"chapterOrder":3449,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3451,"stem":3452,"title":3453,"authors":3454,"date":3052,"chapterOrder":3455,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3457,"stem":3458,"title":3459,"authors":3460,"date":3052,"chapterOrder":3461,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3463,"stem":3464,"title":3465,"authors":3466,"date":3052,"chapterOrder":3467,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3469,"stem":3470,"title":3471,"authors":3472,"date":3052,"chapterOrder":3473,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3475,"stem":3476,"title":3477,"authors":3478,"date":3052,"chapterOrder":3479,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3481,"stem":3482,"title":3483,"authors":3484,"date":3052,"chapterOrder":3485,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3487,"stem":3488,"title":3489,"authors":3490,"date":3052,"chapterOrder":3491,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","现代C++",[7],"2000",{"path":3493,"stem":3494,"title":3495,"authors":3496,"date":3052,"chapterOrder":3497,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3499,"stem":3500,"title":3501,"authors":3502,"date":3052,"chapterOrder":3503,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3505,"stem":3506,"title":3507,"authors":3508,"date":3052,"chapterOrder":3509,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3511,"stem":3512,"title":3513,"authors":3514,"date":3052,"chapterOrder":3515,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3517,"stem":3518,"title":3519,"authors":3520,"date":3052,"chapterOrder":3521,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3523,"stem":3524,"title":3525,"authors":3526,"date":3052,"chapterOrder":3527,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3529,"stem":3530,"title":3531,"authors":3532,"date":3052,"chapterOrder":3533,"chapterDepth":183,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3535,"stem":3536,"title":3537,"authors":3538,"date":3052,"chapterOrder":3539,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3541,"stem":3542,"title":3543,"authors":3544,"date":3052,"chapterOrder":3545,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3547,"stem":3548,"title":3549,"authors":3550,"date":3052,"chapterOrder":3551,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3553,"stem":3554,"title":3555,"authors":3556,"date":3052,"chapterOrder":3557,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3559,"stem":3560,"title":3561,"authors":3562,"date":3052,"chapterOrder":3563,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3565,"stem":3566,"title":3567,"authors":3568,"date":3052,"chapterOrder":3569,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","wiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用库学习",[7],"2100",{"path":3571,"stem":3572,"title":3573,"authors":3574,"date":3052,"chapterOrder":3575,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3577,"stem":3578,"title":3579,"authors":3580,"date":3052,"chapterOrder":3581,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3583,"stem":3584,"title":3585,"authors":3586,"date":3052,"chapterOrder":3587,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3589,"stem":3590,"title":3591,"authors":3592,"date":3052,"chapterOrder":3593,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3595,"stem":3596,"title":3597,"authors":3598,"date":3052,"chapterOrder":3599,"chapterDepth":172,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\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":3601,"stem":3602,"title":3603,"authors":3604,"date":3052,"chapterOrder":3605,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":3057},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","wiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板",[7],"2200",{"path":3054,"stem":3607,"title":3608,"authors":3609,"date":3052,"chapterOrder":3610,"chapterDepth":3070,"docKey":3053,"docRoot":3054,"docTitle":3055,"isWikiDoc":202,"isWikiIndex":202},"wiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",[7],null,[3612,3614,3617,3620],{"name":7,"image":3613},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":3615,"image":3616},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":3618,"image":3619},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":3621,"image":3622},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431898543]