[{"data":1,"prerenderedAt":3845},["ShallowReactive",2],{"wiki-page-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind":3,"wiki-doc-items-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind":3414,"language-switcher-data-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind":3829,"wiki-i18n-paths-\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind":3844},{"id":4,"title":5,"body":6,"canonicalPath":3396,"chapterDepth":174,"chapterOrder":3397,"date":3398,"description":167,"docI18nKey":3399,"docKey":3400,"docRoot":3401,"docTitle":3402,"extension":3403,"i18nKey":3404,"isBlogPost":3405,"isWikiDoc":204,"isWikiIndex":3405,"layout":3406,"legacyPath":3406,"locale":3407,"localeSlug":3408,"meta":3409,"navigation":204,"path":3396,"seo":3410,"sourcePath":3411,"sourceStem":3404,"stem":3412,"wikiDepth":174,"__hash__":3413},"content\u002F_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind.md","std::bind",{"type":7,"value":8,"toc":3372},"minimark",[9,14,18,31,37,47,51,68,81,152,156,161,531,538,546,550,553,820,824,830,834,840,1215,1219,1225,1240,1244,1247,1686,1690,1696,1700,1712,1984,1988,1994,2002,2017,2353,2357,2363,2366,2398,2401,2424,2430,2438,2445,2457,2460,2486,2495,2520,2523,2550,2567,2570,2590,2593,2618,2624,2645,2648,2673,2679,2690,2693,2721,2733,2742,2746,2827,2840,2844,2887,2891,3064,3068,3141,3148,3202,3206,3226,3234,3239,3243,3273,3276,3293,3296,3323,3327,3347,3368],[10,11,13],"h2",{"id":12},"what-problem-does-this-section-solve","What problem does this section solve?",[15,16,17],"p",{},"Sometimes you already have a function, but its parameters don't match the target interface.",[19,20,21,25,28],"ul",{},[22,23,24],"li",{},"I want to predefine certain parameters.",[22,26,27],{},"I'd like to adjust the order of the parameters. Which system or tool are you working with—such as a microcontroller, Robot Operating System, or something else? I can help you rearrange the parameters once I know the context.",[22,29,30],{},"想把成员函数绑定到某个对象上，变成普通回调。",[15,32,33,36],{},[34,35,5],"code",{}," can adapt existing callable objects into new callable objects.",[15,38,39,40,43,44,46],{},"In modern C++, many ",[34,41,42],{},"bind"," scenarios can be written more clearly with lambdas. However, ",[34,45,5],{}," still frequently appears in legacy projects, ROS2 examples, Boost.Asio callbacks, and member function adapters—it remains worth mastering.",[10,48,50],{"id":49},"what-is-this-feature","What is this feature?",[15,52,53,55,56,59,60,63,64,67],{},[34,54,5],{}," takes a callable object and a set of bound parameters, returning a new callable object. When invoking the new object, the placeholders ",[34,57,58],{},"_1",", ",[34,61,62],{},"_2",", and ",[34,65,66],{},"_3"," represent the first, second, and third arguments passed at call time.",[15,69,70,72,73,76,77,80],{},[34,71,5],{}," requires the header file ",[34,74,75],{},"\u003Cfunctional>",", with the placeholder in the namespace ",[34,78,79],{},"std::placeholders",".",[82,83,84,98],"table",{},[85,86,87],"thead",{},[88,89,90,95],"tr",{},[91,92,94],"th",{"align":93},"left","writing method",[91,96,97],{"align":93},"Meaning",[99,100,101,119,129,142],"tbody",{},[88,102,103,109],{},[104,105,106],"td",{"align":93},[34,107,108],{},"std::bind(f, 10, _1)",[104,110,111,112,115,116,80],{"align":93},"Set the first parameter of ",[34,113,114],{},"f"," to ",[34,117,118],{},"10",[88,120,121,126],{},[104,122,123],{"align":93},[34,124,125],{},"std::bind(f, _2, _1)",[104,127,128],{"align":93},"Swap the order of the two parameters when calling.",[88,130,131,136],{},[104,132,133],{"align":93},[34,134,135],{},"std::bind(&C::m, &obj, _1)",[104,137,138,139],{"align":93},"Bind member functions to objects ",[34,140,141],{},"obj",[88,143,144,149],{},[104,145,146],{"align":93},[34,147,148],{},"std::bind(f, std::ref(x), _1)",[104,150,151],{"align":93},"Bind references, not copies.",[10,153,155],{"id":154},"example-code","Example code",[157,158,160],"h3",{"id":159},"example-1-fixed-partial-arguments-of-a-regular-function","Example 1: Fixed partial arguments of a regular function",[162,163,168],"pre",{"className":164,"code":165,"language":166,"meta":167,"style":167},"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","",[34,169,170,183,191,199,206,257,263,314,320,325,336,341,348,364,378,383,407,412,418,445,463,468,497,510,515,526],{"__ignoreMap":167},[171,172,175,179],"span",{"class":173,"line":174},"line",1,[171,176,178],{"class":177},"szBVR","#include",[171,180,182],{"class":181},"sZZnC"," \u003Cfunctional>\n",[171,184,186,188],{"class":173,"line":185},2,[171,187,178],{"class":177},[171,189,190],{"class":181}," \u003Ciostream>\n",[171,192,194,196],{"class":173,"line":193},3,[171,195,178],{"class":177},[171,197,198],{"class":181}," \u003Cstring>\n",[171,200,202],{"class":173,"line":201},4,[171,203,205],{"emptyLinePlaceholder":204},true,"\n",[171,207,209,212,216,220,223,226,229,232,235,239,241,244,247,249,251,254],{"class":173,"line":208},5,[171,210,211],{"class":177},"void",[171,213,215],{"class":214},"sScJk"," print_student",[171,217,219],{"class":218},"sVt8B","(",[171,221,222],{"class":177},"const",[171,224,225],{"class":214}," std",[171,227,228],{"class":218},"::",[171,230,231],{"class":214},"string",[171,233,234],{"class":177},"&",[171,236,238],{"class":237},"s4XuR"," name",[171,240,59],{"class":218},[171,242,243],{"class":177},"int",[171,245,246],{"class":237}," age",[171,248,59],{"class":218},[171,250,243],{"class":177},[171,252,253],{"class":237}," score",[171,255,256],{"class":218},")\n",[171,258,260],{"class":173,"line":259},6,[171,261,262],{"class":218},"{\n",[171,264,266,269,272,275,278,280,283,286,289,291,294,296,299,301,304,308,311],{"class":173,"line":265},7,[171,267,268],{"class":214},"    std",[171,270,271],{"class":218},"::cout ",[171,273,274],{"class":177},"\u003C\u003C",[171,276,277],{"class":218}," name ",[171,279,274],{"class":177},[171,281,282],{"class":181}," \" age=\"",[171,284,285],{"class":177}," \u003C\u003C",[171,287,288],{"class":218}," age ",[171,290,274],{"class":177},[171,292,293],{"class":181}," \" score=\"",[171,295,285],{"class":177},[171,297,298],{"class":218}," score ",[171,300,274],{"class":177},[171,302,303],{"class":181}," \"",[171,305,307],{"class":306},"sj4cs","\\n",[171,309,310],{"class":181},"\"",[171,312,313],{"class":218},";\n",[171,315,317],{"class":173,"line":316},8,[171,318,319],{"class":218},"}\n",[171,321,323],{"class":173,"line":322},9,[171,324,205],{"emptyLinePlaceholder":204},[171,326,328,330,333],{"class":173,"line":327},10,[171,329,243],{"class":177},[171,331,332],{"class":214}," main",[171,334,335],{"class":218},"()\n",[171,337,339],{"class":173,"line":338},11,[171,340,262],{"class":218},[171,342,344],{"class":173,"line":343},12,[171,345,347],{"class":346},"sJ8bj","    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[171,349,351,354,356,358,361],{"class":173,"line":350},13,[171,352,353],{"class":177},"    using",[171,355,225],{"class":214},[171,357,228],{"class":218},[171,359,360],{"class":214},"placeholders",[171,362,363],{"class":218},"::_1;\n",[171,365,367,369,371,373,375],{"class":173,"line":366},14,[171,368,353],{"class":177},[171,370,225],{"class":214},[171,372,228],{"class":218},[171,374,360],{"class":214},[171,376,377],{"class":218},"::_2;\n",[171,379,381],{"class":173,"line":380},15,[171,382,205],{"emptyLinePlaceholder":204},[171,384,386,389,391,394,396,399,401,404],{"class":173,"line":385},16,[171,387,388],{"class":214},"    print_student",[171,390,219],{"class":218},[171,392,393],{"class":181},"\"Alice\"",[171,395,59],{"class":218},[171,397,398],{"class":306},"20",[171,400,59],{"class":218},[171,402,403],{"class":306},"95",[171,405,406],{"class":218},");\n",[171,408,410],{"class":173,"line":409},17,[171,411,205],{"emptyLinePlaceholder":204},[171,413,415],{"class":173,"line":414},18,[171,416,417],{"class":346},"    \u002F\u002F bind 会把函数和部分参数提前绑定成一个可调用对象。\n",[171,419,421,424,427,430,432,434,436,439,442],{"class":173,"line":420},19,[171,422,423],{"class":177},"    auto",[171,425,426],{"class":218}," print_bob ",[171,428,429],{"class":177},"=",[171,431,225],{"class":214},[171,433,228],{"class":218},[171,435,42],{"class":214},[171,437,438],{"class":218},"(print_student, ",[171,440,441],{"class":181},"\"Bob\"",[171,443,444],{"class":218},", _1, _2);\n",[171,446,448,451,453,456,458,461],{"class":173,"line":447},20,[171,449,450],{"class":214},"    print_bob",[171,452,219],{"class":218},[171,454,455],{"class":306},"21",[171,457,59],{"class":218},[171,459,460],{"class":306},"88",[171,462,406],{"class":218},[171,464,466],{"class":173,"line":465},21,[171,467,205],{"emptyLinePlaceholder":204},[171,469,471,473,476,478,480,482,484,486,489,491,494],{"class":173,"line":470},22,[171,472,423],{"class":177},[171,474,475],{"class":218}," print_charlie_score ",[171,477,429],{"class":177},[171,479,225],{"class":214},[171,481,228],{"class":218},[171,483,42],{"class":214},[171,485,438],{"class":218},[171,487,488],{"class":181},"\"Charlie\"",[171,490,59],{"class":218},[171,492,493],{"class":306},"22",[171,495,496],{"class":218},", _1);\n",[171,498,500,503,505,508],{"class":173,"line":499},23,[171,501,502],{"class":214},"    print_charlie_score",[171,504,219],{"class":218},[171,506,507],{"class":306},"91",[171,509,406],{"class":218},[171,511,513],{"class":173,"line":512},24,[171,514,205],{"emptyLinePlaceholder":204},[171,516,518,521,524],{"class":173,"line":517},25,[171,519,520],{"class":177},"    return",[171,522,523],{"class":306}," 0",[171,525,313],{"class":218},[171,527,529],{"class":173,"line":528},26,[171,530,319],{"class":218},[15,532,533,537],{},[534,535,536],"strong",{},"Results","：",[162,539,544],{"className":540,"code":542,"language":543,"meta":167},[541],"language-text","Alice age=20 score=95\nBob age=21 score=88\nCharlie age=22 score=91\n","text",[34,545,542],{"__ignoreMap":167},[157,547,549],{"id":548},"example-2-adjust-parameter-order","Example 2: Adjust Parameter Order",[15,551,552],{},"The position of placeholders determines the order of parameters received by the original function.",[162,554,556],{"className":164,"code":555,"language":166,"meta":167,"style":167},"#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",[34,557,558,564,570,574,597,601,648,652,656,664,668,672,684,696,700,716,720,724,742,757,761,783,794,804,808,816],{"__ignoreMap":167},[171,559,560,562],{"class":173,"line":174},[171,561,178],{"class":177},[171,563,182],{"class":181},[171,565,566,568],{"class":173,"line":185},[171,567,178],{"class":177},[171,569,190],{"class":181},[171,571,572],{"class":173,"line":193},[171,573,205],{"emptyLinePlaceholder":204},[171,575,576,578,581,583,585,588,590,592,595],{"class":173,"line":201},[171,577,211],{"class":177},[171,579,580],{"class":214}," divide",[171,582,219],{"class":218},[171,584,243],{"class":177},[171,586,587],{"class":237}," a",[171,589,59],{"class":218},[171,591,243],{"class":177},[171,593,594],{"class":237}," b",[171,596,256],{"class":218},[171,598,599],{"class":173,"line":208},[171,600,262],{"class":218},[171,602,603,605,607,609,612,614,617,619,622,624,627,629,632,635,638,640,642,644,646],{"class":173,"line":259},[171,604,268],{"class":214},[171,606,271],{"class":218},[171,608,274],{"class":177},[171,610,611],{"class":218}," a ",[171,613,274],{"class":177},[171,615,616],{"class":181}," \" \u002F \"",[171,618,285],{"class":177},[171,620,621],{"class":218}," b ",[171,623,274],{"class":177},[171,625,626],{"class":181}," \" = \"",[171,628,285],{"class":177},[171,630,631],{"class":218}," (a ",[171,633,634],{"class":177},"\u002F",[171,636,637],{"class":218}," b) ",[171,639,274],{"class":177},[171,641,303],{"class":181},[171,643,307],{"class":306},[171,645,310],{"class":181},[171,647,313],{"class":218},[171,649,650],{"class":173,"line":265},[171,651,319],{"class":218},[171,653,654],{"class":173,"line":316},[171,655,205],{"emptyLinePlaceholder":204},[171,657,658,660,662],{"class":173,"line":322},[171,659,243],{"class":177},[171,661,332],{"class":214},[171,663,335],{"class":218},[171,665,666],{"class":173,"line":327},[171,667,262],{"class":218},[171,669,670],{"class":173,"line":338},[171,671,347],{"class":346},[171,673,674,676,678,680,682],{"class":173,"line":343},[171,675,353],{"class":177},[171,677,225],{"class":214},[171,679,228],{"class":218},[171,681,360],{"class":214},[171,683,363],{"class":218},[171,685,686,688,690,692,694],{"class":173,"line":350},[171,687,353],{"class":177},[171,689,225],{"class":214},[171,691,228],{"class":218},[171,693,360],{"class":214},[171,695,377],{"class":218},[171,697,698],{"class":173,"line":366},[171,699,205],{"emptyLinePlaceholder":204},[171,701,702,705,707,709,711,714],{"class":173,"line":380},[171,703,704],{"class":214},"    divide",[171,706,219],{"class":218},[171,708,118],{"class":306},[171,710,59],{"class":218},[171,712,713],{"class":306},"2",[171,715,406],{"class":218},[171,717,718],{"class":173,"line":385},[171,719,205],{"emptyLinePlaceholder":204},[171,721,722],{"class":173,"line":409},[171,723,417],{"class":346},[171,725,726,728,731,733,735,737,739],{"class":173,"line":414},[171,727,423],{"class":177},[171,729,730],{"class":218}," swapped ",[171,732,429],{"class":177},[171,734,225],{"class":214},[171,736,228],{"class":218},[171,738,42],{"class":214},[171,740,741],{"class":218},"(divide, _2, _1);\n",[171,743,744,747,749,751,753,755],{"class":173,"line":420},[171,745,746],{"class":214},"    swapped",[171,748,219],{"class":218},[171,750,713],{"class":306},[171,752,59],{"class":218},[171,754,118],{"class":306},[171,756,406],{"class":218},[171,758,759],{"class":173,"line":447},[171,760,205],{"emptyLinePlaceholder":204},[171,762,763,765,768,770,772,774,776,779,781],{"class":173,"line":465},[171,764,423],{"class":177},[171,766,767],{"class":218}," half ",[171,769,429],{"class":177},[171,771,225],{"class":214},[171,773,228],{"class":218},[171,775,42],{"class":214},[171,777,778],{"class":218},"(divide, _1, ",[171,780,713],{"class":306},[171,782,406],{"class":218},[171,784,785,788,790,792],{"class":173,"line":470},[171,786,787],{"class":214},"    half",[171,789,219],{"class":218},[171,791,118],{"class":306},[171,793,406],{"class":218},[171,795,796,798,800,802],{"class":173,"line":499},[171,797,787],{"class":214},[171,799,219],{"class":218},[171,801,398],{"class":306},[171,803,406],{"class":218},[171,805,806],{"class":173,"line":512},[171,807,205],{"emptyLinePlaceholder":204},[171,809,810,812,814],{"class":173,"line":517},[171,811,520],{"class":177},[171,813,523],{"class":306},[171,815,313],{"class":218},[171,817,818],{"class":173,"line":528},[171,819,319],{"class":218},[15,821,822,537],{},[534,823,536],{},[162,825,828],{"className":826,"code":827,"language":543,"meta":167},[541],"10 \u002F 2 = 5\n10 \u002F 2 = 5\n10 \u002F 2 = 5\n20 \u002F 2 = 10\n",[34,829,827],{"__ignoreMap":167},[157,831,833],{"id":832},"example-3-binding-member-functions","Example 3: Binding Member Functions",[15,835,836,837,839],{},"Non-static member functions require an object to be called. The second parameter of ",[34,838,5],{}," is typically an object pointer, object reference, or smart pointer.",[162,841,843],{"className":164,"code":842,"language":166,"meta":167,"style":167},"#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",[34,844,845,851,857,863,867,875,879,886,890,895,927,931,967,972,1014,1019,1024,1028,1036,1040,1044,1056,1068,1072,1087,1091,1095,1126,1144,1149,1183,1196,1201,1210],{"__ignoreMap":167},[171,846,847,849],{"class":173,"line":174},[171,848,178],{"class":177},[171,850,182],{"class":181},[171,852,853,855],{"class":173,"line":185},[171,854,178],{"class":177},[171,856,190],{"class":181},[171,858,859,861],{"class":173,"line":193},[171,860,178],{"class":177},[171,862,198],{"class":181},[171,864,865],{"class":173,"line":201},[171,866,205],{"emptyLinePlaceholder":204},[171,868,869,872],{"class":173,"line":208},[171,870,871],{"class":177},"class",[171,873,874],{"class":214}," Printer\n",[171,876,877],{"class":173,"line":259},[171,878,262],{"class":218},[171,880,881,883],{"class":173,"line":265},[171,882,268],{"class":214},[171,884,885],{"class":218},"::string prefix_;\n",[171,887,888],{"class":173,"line":316},[171,889,205],{"emptyLinePlaceholder":204},[171,891,892],{"class":173,"line":322},[171,893,894],{"class":177},"public:\n",[171,896,897,900,903,905,907,909,911,913,915,918,921,924],{"class":173,"line":327},[171,898,899],{"class":177},"    explicit",[171,901,902],{"class":214}," Printer",[171,904,219],{"class":218},[171,906,222],{"class":177},[171,908,225],{"class":214},[171,910,228],{"class":218},[171,912,231],{"class":214},[171,914,234],{"class":177},[171,916,917],{"class":237}," prefix",[171,919,920],{"class":218},") : ",[171,922,923],{"class":214},"prefix_",[171,925,926],{"class":218},"(prefix) {}\n",[171,928,929],{"class":173,"line":338},[171,930,205],{"emptyLinePlaceholder":204},[171,932,933,936,939,941,943,946,948,950,952,954,956,958,961,964],{"class":173,"line":343},[171,934,935],{"class":177},"    void",[171,937,938],{"class":214}," print",[171,940,219],{"class":218},[171,942,243],{"class":177},[171,944,945],{"class":237}," id",[171,947,59],{"class":218},[171,949,222],{"class":177},[171,951,225],{"class":214},[171,953,228],{"class":218},[171,955,231],{"class":214},[171,957,234],{"class":177},[171,959,960],{"class":237}," text",[171,962,963],{"class":218},") ",[171,965,966],{"class":177},"const\n",[171,968,969],{"class":173,"line":350},[171,970,971],{"class":218},"    {\n",[171,973,974,977,979,981,984,986,989,991,994,996,999,1001,1004,1006,1008,1010,1012],{"class":173,"line":366},[171,975,976],{"class":214},"        std",[171,978,271],{"class":218},[171,980,274],{"class":177},[171,982,983],{"class":218}," prefix_ ",[171,985,274],{"class":177},[171,987,988],{"class":181}," \" #\"",[171,990,285],{"class":177},[171,992,993],{"class":218}," id ",[171,995,274],{"class":177},[171,997,998],{"class":181}," \": \"",[171,1000,285],{"class":177},[171,1002,1003],{"class":218}," text ",[171,1005,274],{"class":177},[171,1007,303],{"class":181},[171,1009,307],{"class":306},[171,1011,310],{"class":181},[171,1013,313],{"class":218},[171,1015,1016],{"class":173,"line":380},[171,1017,1018],{"class":218},"    }\n",[171,1020,1021],{"class":173,"line":385},[171,1022,1023],{"class":218},"};\n",[171,1025,1026],{"class":173,"line":409},[171,1027,205],{"emptyLinePlaceholder":204},[171,1029,1030,1032,1034],{"class":173,"line":414},[171,1031,243],{"class":177},[171,1033,332],{"class":214},[171,1035,335],{"class":218},[171,1037,1038],{"class":173,"line":420},[171,1039,262],{"class":218},[171,1041,1042],{"class":173,"line":447},[171,1043,347],{"class":346},[171,1045,1046,1048,1050,1052,1054],{"class":173,"line":465},[171,1047,353],{"class":177},[171,1049,225],{"class":214},[171,1051,228],{"class":218},[171,1053,360],{"class":214},[171,1055,363],{"class":218},[171,1057,1058,1060,1062,1064,1066],{"class":173,"line":470},[171,1059,353],{"class":177},[171,1061,225],{"class":214},[171,1063,228],{"class":218},[171,1065,360],{"class":214},[171,1067,377],{"class":218},[171,1069,1070],{"class":173,"line":499},[171,1071,205],{"emptyLinePlaceholder":204},[171,1073,1074,1077,1080,1082,1085],{"class":173,"line":512},[171,1075,1076],{"class":218},"    Printer ",[171,1078,1079],{"class":214},"printer",[171,1081,219],{"class":218},[171,1083,1084],{"class":181},"\"LOG\"",[171,1086,406],{"class":218},[171,1088,1089],{"class":173,"line":517},[171,1090,205],{"emptyLinePlaceholder":204},[171,1092,1093],{"class":173,"line":528},[171,1094,417],{"class":346},[171,1096,1098,1100,1103,1105,1107,1109,1111,1113,1115,1118,1121,1123],{"class":173,"line":1097},27,[171,1099,423],{"class":177},[171,1101,1102],{"class":218}," print_any ",[171,1104,429],{"class":177},[171,1106,225],{"class":214},[171,1108,228],{"class":218},[171,1110,42],{"class":214},[171,1112,219],{"class":218},[171,1114,234],{"class":177},[171,1116,1117],{"class":214},"Printer",[171,1119,1120],{"class":218},"::print, ",[171,1122,234],{"class":177},[171,1124,1125],{"class":218},"printer, _1, _2);\n",[171,1127,1129,1132,1134,1137,1139,1142],{"class":173,"line":1128},28,[171,1130,1131],{"class":214},"    print_any",[171,1133,219],{"class":218},[171,1135,1136],{"class":306},"7",[171,1138,59],{"class":218},[171,1140,1141],{"class":181},"\"ready\"",[171,1143,406],{"class":218},[171,1145,1147],{"class":173,"line":1146},29,[171,1148,205],{"emptyLinePlaceholder":204},[171,1150,1152,1154,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1178,1181],{"class":173,"line":1151},30,[171,1153,423],{"class":177},[171,1155,1156],{"class":218}," print_ok ",[171,1158,429],{"class":177},[171,1160,225],{"class":214},[171,1162,228],{"class":218},[171,1164,42],{"class":214},[171,1166,219],{"class":218},[171,1168,234],{"class":177},[171,1170,1117],{"class":214},[171,1172,1120],{"class":218},[171,1174,234],{"class":177},[171,1176,1177],{"class":218},"printer, _1, ",[171,1179,1180],{"class":181},"\"ok\"",[171,1182,406],{"class":218},[171,1184,1186,1189,1191,1194],{"class":173,"line":1185},31,[171,1187,1188],{"class":214},"    print_ok",[171,1190,219],{"class":218},[171,1192,1193],{"class":306},"8",[171,1195,406],{"class":218},[171,1197,1199],{"class":173,"line":1198},32,[171,1200,205],{"emptyLinePlaceholder":204},[171,1202,1204,1206,1208],{"class":173,"line":1203},33,[171,1205,520],{"class":177},[171,1207,523],{"class":306},[171,1209,313],{"class":218},[171,1211,1213],{"class":173,"line":1212},34,[171,1214,319],{"class":218},[15,1216,1217,537],{},[534,1218,536],{},[162,1220,1223],{"className":1221,"code":1222,"language":543,"meta":167},[541],"LOG #7: ready\nLOG #8: ok\n",[34,1224,1222],{"__ignoreMap":167},[15,1226,1227,1228,1231,1232,1235,1236,1239],{},"This ",[34,1229,1230],{},"&printer"," must remain valid throughout the use of ",[34,1233,1234],{},"print_any"," and ",[34,1237,1238],{},"print_ok",". If the bound callback is to be saved for a longer duration, it is generally necessary to consider smart pointers or more explicit lifecycle management.",[157,1241,1243],{"id":1242},"example-4-comparison-between-bind-and-lambda","Example 4: Comparison between bind and Lambda",[15,1245,1246],{},"For the same parameter adaptation task, Lambda tends to be more intuitive, since both parameter names and call relationships are clearly written out.",[162,1248,1250],{"className":164,"code":1249,"language":166,"meta":167,"style":167},"#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",[34,1251,1252,1258,1264,1268,1298,1302,1327,1331,1335,1343,1347,1351,1363,1375,1379,1383,1406,1431,1445,1450,1454,1492,1528,1532,1554,1577,1590,1594,1598,1634,1670,1674,1682],{"__ignoreMap":167},[171,1253,1254,1256],{"class":173,"line":174},[171,1255,178],{"class":177},[171,1257,182],{"class":181},[171,1259,1260,1262],{"class":173,"line":185},[171,1261,178],{"class":177},[171,1263,190],{"class":181},[171,1265,1266],{"class":173,"line":193},[171,1267,205],{"emptyLinePlaceholder":204},[171,1269,1270,1272,1275,1277,1279,1282,1284,1286,1289,1291,1293,1296],{"class":173,"line":201},[171,1271,243],{"class":177},[171,1273,1274],{"class":214}," weighted_sum",[171,1276,219],{"class":218},[171,1278,243],{"class":177},[171,1280,1281],{"class":237}," base",[171,1283,59],{"class":218},[171,1285,243],{"class":177},[171,1287,1288],{"class":237}," x",[171,1290,59],{"class":218},[171,1292,243],{"class":177},[171,1294,1295],{"class":237}," y",[171,1297,256],{"class":218},[171,1299,1300],{"class":173,"line":208},[171,1301,262],{"class":218},[171,1303,1304,1306,1309,1312,1315,1318,1321,1324],{"class":173,"line":259},[171,1305,520],{"class":177},[171,1307,1308],{"class":218}," base ",[171,1310,1311],{"class":177},"+",[171,1313,1314],{"class":218}," x ",[171,1316,1317],{"class":177},"*",[171,1319,1320],{"class":306}," 10",[171,1322,1323],{"class":177}," +",[171,1325,1326],{"class":218}," y;\n",[171,1328,1329],{"class":173,"line":265},[171,1330,319],{"class":218},[171,1332,1333],{"class":173,"line":316},[171,1334,205],{"emptyLinePlaceholder":204},[171,1336,1337,1339,1341],{"class":173,"line":322},[171,1338,243],{"class":177},[171,1340,332],{"class":214},[171,1342,335],{"class":218},[171,1344,1345],{"class":173,"line":327},[171,1346,262],{"class":218},[171,1348,1349],{"class":173,"line":338},[171,1350,347],{"class":346},[171,1352,1353,1355,1357,1359,1361],{"class":173,"line":343},[171,1354,353],{"class":177},[171,1356,225],{"class":214},[171,1358,228],{"class":218},[171,1360,360],{"class":214},[171,1362,363],{"class":218},[171,1364,1365,1367,1369,1371,1373],{"class":173,"line":350},[171,1366,353],{"class":177},[171,1368,225],{"class":214},[171,1370,228],{"class":218},[171,1372,360],{"class":214},[171,1374,377],{"class":218},[171,1376,1377],{"class":173,"line":366},[171,1378,205],{"emptyLinePlaceholder":204},[171,1380,1381],{"class":173,"line":380},[171,1382,417],{"class":346},[171,1384,1385,1387,1390,1392,1394,1396,1398,1401,1404],{"class":173,"line":385},[171,1386,423],{"class":177},[171,1388,1389],{"class":218}," by_bind ",[171,1391,429],{"class":177},[171,1393,225],{"class":214},[171,1395,228],{"class":218},[171,1397,42],{"class":214},[171,1399,1400],{"class":218},"(weighted_sum, ",[171,1402,1403],{"class":306},"100",[171,1405,444],{"class":218},[171,1407,1408,1410,1413,1415,1418,1420,1422,1424,1426,1428],{"class":173,"line":409},[171,1409,423],{"class":177},[171,1411,1412],{"class":218}," by_lambda ",[171,1414,429],{"class":177},[171,1416,1417],{"class":218}," [](",[171,1419,243],{"class":177},[171,1421,1288],{"class":237},[171,1423,59],{"class":218},[171,1425,243],{"class":177},[171,1427,1295],{"class":237},[171,1429,1430],{"class":218},") {\n",[171,1432,1433,1436,1438,1440,1442],{"class":173,"line":414},[171,1434,1435],{"class":177},"        return",[171,1437,1274],{"class":214},[171,1439,219],{"class":218},[171,1441,1403],{"class":306},[171,1443,1444],{"class":218},", x, y);\n",[171,1446,1447],{"class":173,"line":420},[171,1448,1449],{"class":218},"    };\n",[171,1451,1452],{"class":173,"line":447},[171,1453,205],{"emptyLinePlaceholder":204},[171,1455,1456,1458,1460,1462,1465,1467,1470,1472,1475,1477,1480,1482,1484,1486,1488,1490],{"class":173,"line":465},[171,1457,268],{"class":214},[171,1459,271],{"class":218},[171,1461,274],{"class":177},[171,1463,1464],{"class":181}," \"bind result = \"",[171,1466,285],{"class":177},[171,1468,1469],{"class":214}," by_bind",[171,1471,219],{"class":218},[171,1473,1474],{"class":306},"3",[171,1476,59],{"class":218},[171,1478,1479],{"class":306},"4",[171,1481,963],{"class":218},[171,1483,274],{"class":177},[171,1485,303],{"class":181},[171,1487,307],{"class":306},[171,1489,310],{"class":181},[171,1491,313],{"class":218},[171,1493,1494,1496,1498,1500,1503,1505,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526],{"class":173,"line":470},[171,1495,268],{"class":214},[171,1497,271],{"class":218},[171,1499,274],{"class":177},[171,1501,1502],{"class":181}," \"lambda result = \"",[171,1504,285],{"class":177},[171,1506,1507],{"class":214}," by_lambda",[171,1509,219],{"class":218},[171,1511,1474],{"class":306},[171,1513,59],{"class":218},[171,1515,1479],{"class":306},[171,1517,963],{"class":218},[171,1519,274],{"class":177},[171,1521,303],{"class":181},[171,1523,307],{"class":306},[171,1525,310],{"class":181},[171,1527,313],{"class":218},[171,1529,1530],{"class":173,"line":499},[171,1531,205],{"emptyLinePlaceholder":204},[171,1533,1534,1536,1539,1541,1543,1545,1547,1549,1551],{"class":173,"line":512},[171,1535,423],{"class":177},[171,1537,1538],{"class":218}," swapped_bind ",[171,1540,429],{"class":177},[171,1542,225],{"class":214},[171,1544,228],{"class":218},[171,1546,42],{"class":214},[171,1548,1400],{"class":218},[171,1550,1403],{"class":306},[171,1552,1553],{"class":218},", _2, _1);\n",[171,1555,1556,1558,1561,1563,1565,1567,1569,1571,1573,1575],{"class":173,"line":517},[171,1557,423],{"class":177},[171,1559,1560],{"class":218}," swapped_lambda ",[171,1562,429],{"class":177},[171,1564,1417],{"class":218},[171,1566,243],{"class":177},[171,1568,1288],{"class":237},[171,1570,59],{"class":218},[171,1572,243],{"class":177},[171,1574,1295],{"class":237},[171,1576,1430],{"class":218},[171,1578,1579,1581,1583,1585,1587],{"class":173,"line":528},[171,1580,1435],{"class":177},[171,1582,1274],{"class":214},[171,1584,219],{"class":218},[171,1586,1403],{"class":306},[171,1588,1589],{"class":218},", y, x);\n",[171,1591,1592],{"class":173,"line":1097},[171,1593,1449],{"class":218},[171,1595,1596],{"class":173,"line":1128},[171,1597,205],{"emptyLinePlaceholder":204},[171,1599,1600,1602,1604,1606,1609,1611,1614,1616,1618,1620,1622,1624,1626,1628,1630,1632],{"class":173,"line":1146},[171,1601,268],{"class":214},[171,1603,271],{"class":218},[171,1605,274],{"class":177},[171,1607,1608],{"class":181}," \"swapped bind result = \"",[171,1610,285],{"class":177},[171,1612,1613],{"class":214}," swapped_bind",[171,1615,219],{"class":218},[171,1617,1474],{"class":306},[171,1619,59],{"class":218},[171,1621,1479],{"class":306},[171,1623,963],{"class":218},[171,1625,274],{"class":177},[171,1627,303],{"class":181},[171,1629,307],{"class":306},[171,1631,310],{"class":181},[171,1633,313],{"class":218},[171,1635,1636,1638,1640,1642,1645,1647,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668],{"class":173,"line":1151},[171,1637,268],{"class":214},[171,1639,271],{"class":218},[171,1641,274],{"class":177},[171,1643,1644],{"class":181}," \"swapped lambda result = \"",[171,1646,285],{"class":177},[171,1648,1649],{"class":214}," swapped_lambda",[171,1651,219],{"class":218},[171,1653,1474],{"class":306},[171,1655,59],{"class":218},[171,1657,1479],{"class":306},[171,1659,963],{"class":218},[171,1661,274],{"class":177},[171,1663,303],{"class":181},[171,1665,307],{"class":306},[171,1667,310],{"class":181},[171,1669,313],{"class":218},[171,1671,1672],{"class":173,"line":1185},[171,1673,205],{"emptyLinePlaceholder":204},[171,1675,1676,1678,1680],{"class":173,"line":1198},[171,1677,520],{"class":177},[171,1679,523],{"class":306},[171,1681,313],{"class":218},[171,1683,1684],{"class":173,"line":1203},[171,1685,319],{"class":218},[15,1687,1688,537],{},[534,1689,536],{},[162,1691,1694],{"className":1692,"code":1693,"language":543,"meta":167},[541],"bind result = 134\nlambda result = 134\nswapped bind result = 143\nswapped lambda result = 143\n",[34,1695,1693],{"__ignoreMap":167},[157,1697,1699],{"id":1698},"example-5-by-default-bind-copies-its-parameters-so-use-stdref-when-a-reference-is-needed","Example 5: By default, bind copies its parameters, so use std::ref when a reference is needed.",[15,1701,1702,1704,1705,1708,1709,80],{},[34,1703,5],{}," copies parameters by default when saving. If you want to bind references, you must explicitly use ",[34,1706,1707],{},"std::ref"," or ",[34,1710,1711],{},"std::cref",[162,1713,1715],{"className":164,"code":1714,"language":166,"meta":167,"style":167},"#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",[34,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":167},[171,1718,1719,1721],{"class":173,"line":174},[171,1720,178],{"class":177},[171,1722,182],{"class":181},[171,1724,1725,1727],{"class":173,"line":185},[171,1726,178],{"class":177},[171,1728,190],{"class":181},[171,1730,1731],{"class":173,"line":193},[171,1732,205],{"emptyLinePlaceholder":204},[171,1734,1735,1737,1740,1742,1745,1748,1750,1752,1755],{"class":173,"line":201},[171,1736,211],{"class":177},[171,1738,1739],{"class":214}," add_to",[171,1741,219],{"class":218},[171,1743,1744],{"class":177},"int&",[171,1746,1747],{"class":237}," total",[171,1749,59],{"class":218},[171,1751,243],{"class":177},[171,1753,1754],{"class":237}," value",[171,1756,256],{"class":218},[171,1758,1759],{"class":173,"line":208},[171,1760,262],{"class":218},[171,1762,1763,1766,1769],{"class":173,"line":259},[171,1764,1765],{"class":218},"    total ",[171,1767,1768],{"class":177},"+=",[171,1770,1771],{"class":218}," value;\n",[171,1773,1774,1776,1778,1780,1783,1785,1788,1790,1792,1794,1796],{"class":173,"line":265},[171,1775,268],{"class":214},[171,1777,271],{"class":218},[171,1779,274],{"class":177},[171,1781,1782],{"class":181}," \"inside total = \"",[171,1784,285],{"class":177},[171,1786,1787],{"class":218}," total ",[171,1789,274],{"class":177},[171,1791,303],{"class":181},[171,1793,307],{"class":306},[171,1795,310],{"class":181},[171,1797,313],{"class":218},[171,1799,1800],{"class":173,"line":316},[171,1801,319],{"class":218},[171,1803,1804],{"class":173,"line":322},[171,1805,205],{"emptyLinePlaceholder":204},[171,1807,1808,1810,1812],{"class":173,"line":327},[171,1809,243],{"class":177},[171,1811,332],{"class":214},[171,1813,335],{"class":218},[171,1815,1816],{"class":173,"line":338},[171,1817,262],{"class":218},[171,1819,1820],{"class":173,"line":343},[171,1821,347],{"class":346},[171,1823,1824,1827,1829,1831,1833],{"class":173,"line":350},[171,1825,1826],{"class":177},"    int",[171,1828,1787],{"class":218},[171,1830,429],{"class":177},[171,1832,523],{"class":306},[171,1834,313],{"class":218},[171,1836,1837],{"class":173,"line":366},[171,1838,205],{"emptyLinePlaceholder":204},[171,1840,1841],{"class":173,"line":380},[171,1842,417],{"class":346},[171,1844,1845,1847,1850,1852,1854,1856,1858,1861,1864],{"class":173,"line":385},[171,1846,423],{"class":177},[171,1848,1849],{"class":218}," add_copy ",[171,1851,429],{"class":177},[171,1853,225],{"class":214},[171,1855,228],{"class":218},[171,1857,42],{"class":214},[171,1859,1860],{"class":218},"(add_to, total, ",[171,1862,1863],{"class":306},"5",[171,1865,406],{"class":218},[171,1867,1868,1871],{"class":173,"line":409},[171,1869,1870],{"class":214},"    add_copy",[171,1872,1873],{"class":218},"();\n",[171,1875,1876,1878,1880,1882,1885,1887,1889,1891,1893,1895,1897],{"class":173,"line":414},[171,1877,268],{"class":214},[171,1879,271],{"class":218},[171,1881,274],{"class":177},[171,1883,1884],{"class":181}," \"outside after copy bind = \"",[171,1886,285],{"class":177},[171,1888,1787],{"class":218},[171,1890,274],{"class":177},[171,1892,303],{"class":181},[171,1894,307],{"class":306},[171,1896,310],{"class":181},[171,1898,313],{"class":218},[171,1900,1901],{"class":173,"line":420},[171,1902,205],{"emptyLinePlaceholder":204},[171,1904,1905,1907,1910,1912,1914,1916,1918,1921,1924,1926,1929,1932,1934],{"class":173,"line":447},[171,1906,423],{"class":177},[171,1908,1909],{"class":218}," add_ref ",[171,1911,429],{"class":177},[171,1913,225],{"class":214},[171,1915,228],{"class":218},[171,1917,42],{"class":214},[171,1919,1920],{"class":218},"(add_to, ",[171,1922,1923],{"class":214},"std",[171,1925,228],{"class":218},[171,1927,1928],{"class":214},"ref",[171,1930,1931],{"class":218},"(total), ",[171,1933,1863],{"class":306},[171,1935,406],{"class":218},[171,1937,1938,1941],{"class":173,"line":465},[171,1939,1940],{"class":214},"    add_ref",[171,1942,1873],{"class":218},[171,1944,1945,1947,1949,1951,1954,1956,1958,1960,1962,1964,1966],{"class":173,"line":470},[171,1946,268],{"class":214},[171,1948,271],{"class":218},[171,1950,274],{"class":177},[171,1952,1953],{"class":181}," \"outside after ref bind = \"",[171,1955,285],{"class":177},[171,1957,1787],{"class":218},[171,1959,274],{"class":177},[171,1961,303],{"class":181},[171,1963,307],{"class":306},[171,1965,310],{"class":181},[171,1967,313],{"class":218},[171,1969,1970],{"class":173,"line":499},[171,1971,205],{"emptyLinePlaceholder":204},[171,1973,1974,1976,1978],{"class":173,"line":512},[171,1975,520],{"class":177},[171,1977,523],{"class":306},[171,1979,313],{"class":218},[171,1981,1982],{"class":173,"line":517},[171,1983,319],{"class":218},[15,1985,1986,537],{},[534,1987,536],{},[162,1989,1992],{"className":1990,"code":1991,"language":543,"meta":167},[541],"inside total = 5\noutside after copy bind = 0\ninside total = 5\noutside after ref bind = 5\n",[34,1993,1991],{"__ignoreMap":167},[157,1995,1997,1998,2001],{"id":1996},"示例-6在成员函数中使用-this-绑定当前对象","示例 6：在成员函数中使用 ",[34,1999,2000],{},"this"," 绑定当前对象",[15,2003,2004,2005,2007,2008,2010,2011,2013,2014,2016],{},"前面的示例是在类外部创建对象，再把对象地址 ",[34,2006,1230],{}," 传给 ",[34,2009,5],{},"。如果 ",[34,2012,5],{}," 本身就在类的成员函数中使用，可以直接传入 ",[34,2015,2000],{},"，表示把成员函数绑定到当前对象。",[162,2018,2020],{"className":164,"code":2019,"language":166,"meta":167,"style":167},"#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",[34,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":167},[171,2023,2024,2026],{"class":173,"line":174},[171,2025,178],{"class":177},[171,2027,182],{"class":181},[171,2029,2030,2032],{"class":173,"line":185},[171,2031,178],{"class":177},[171,2033,190],{"class":181},[171,2035,2036,2038],{"class":173,"line":193},[171,2037,178],{"class":177},[171,2039,198],{"class":181},[171,2041,2042],{"class":173,"line":201},[171,2043,205],{"emptyLinePlaceholder":204},[171,2045,2046,2048],{"class":173,"line":208},[171,2047,871],{"class":177},[171,2049,2050],{"class":214}," Robot\n",[171,2052,2053],{"class":173,"line":259},[171,2054,262],{"class":218},[171,2056,2057,2059],{"class":173,"line":265},[171,2058,268],{"class":214},[171,2060,2061],{"class":218},"::string name_;\n",[171,2063,2064],{"class":173,"line":316},[171,2065,205],{"emptyLinePlaceholder":204},[171,2067,2068],{"class":173,"line":322},[171,2069,894],{"class":177},[171,2071,2072,2074,2077,2079,2081,2083,2085,2087,2089,2091,2093,2096],{"class":173,"line":327},[171,2073,899],{"class":177},[171,2075,2076],{"class":214}," Robot",[171,2078,219],{"class":218},[171,2080,222],{"class":177},[171,2082,225],{"class":214},[171,2084,228],{"class":218},[171,2086,231],{"class":214},[171,2088,234],{"class":177},[171,2090,238],{"class":237},[171,2092,920],{"class":218},[171,2094,2095],{"class":214},"name_",[171,2097,2098],{"class":218},"(name) {}\n",[171,2100,2101],{"class":173,"line":338},[171,2102,205],{"emptyLinePlaceholder":204},[171,2104,2105,2107,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128,2130],{"class":173,"line":343},[171,2106,935],{"class":177},[171,2108,2109],{"class":214}," on_message",[171,2111,219],{"class":218},[171,2113,243],{"class":177},[171,2115,945],{"class":237},[171,2117,59],{"class":218},[171,2119,222],{"class":177},[171,2121,225],{"class":214},[171,2123,228],{"class":218},[171,2125,231],{"class":214},[171,2127,234],{"class":177},[171,2129,960],{"class":237},[171,2131,256],{"class":218},[171,2133,2134],{"class":173,"line":350},[171,2135,971],{"class":218},[171,2137,2138,2140,2142,2144,2147,2149,2151,2153,2155,2157,2159,2161,2163,2165,2167,2169,2171],{"class":173,"line":366},[171,2139,976],{"class":214},[171,2141,271],{"class":218},[171,2143,274],{"class":177},[171,2145,2146],{"class":218}," name_ ",[171,2148,274],{"class":177},[171,2150,988],{"class":181},[171,2152,285],{"class":177},[171,2154,993],{"class":218},[171,2156,274],{"class":177},[171,2158,998],{"class":181},[171,2160,285],{"class":177},[171,2162,1003],{"class":218},[171,2164,274],{"class":177},[171,2166,303],{"class":181},[171,2168,307],{"class":306},[171,2170,310],{"class":181},[171,2172,313],{"class":218},[171,2174,2175],{"class":173,"line":380},[171,2176,1018],{"class":218},[171,2178,2179],{"class":173,"line":385},[171,2180,205],{"emptyLinePlaceholder":204},[171,2182,2183,2185,2188],{"class":173,"line":409},[171,2184,935],{"class":177},[171,2186,2187],{"class":214}," demo",[171,2189,335],{"class":218},[171,2191,2192],{"class":173,"line":414},[171,2193,971],{"class":218},[171,2195,2196,2199,2201,2203,2205],{"class":173,"line":420},[171,2197,2198],{"class":177},"        using",[171,2200,225],{"class":214},[171,2202,228],{"class":218},[171,2204,360],{"class":214},[171,2206,363],{"class":218},[171,2208,2209,2211,2213,2215,2217],{"class":173,"line":447},[171,2210,2198],{"class":177},[171,2212,225],{"class":214},[171,2214,228],{"class":218},[171,2216,360],{"class":214},[171,2218,377],{"class":218},[171,2220,2221],{"class":173,"line":465},[171,2222,205],{"emptyLinePlaceholder":204},[171,2224,2225,2228,2231,2233,2235,2237,2239,2241,2243,2246,2249,2251],{"class":173,"line":470},[171,2226,2227],{"class":177},"        auto",[171,2229,2230],{"class":218}," callback ",[171,2232,429],{"class":177},[171,2234,225],{"class":214},[171,2236,228],{"class":218},[171,2238,42],{"class":214},[171,2240,219],{"class":218},[171,2242,234],{"class":177},[171,2244,2245],{"class":214},"Robot",[171,2247,2248],{"class":218},"::on_message, ",[171,2250,2000],{"class":306},[171,2252,444],{"class":218},[171,2254,2255],{"class":173,"line":499},[171,2256,205],{"emptyLinePlaceholder":204},[171,2258,2259,2262,2264,2266,2268,2270],{"class":173,"line":512},[171,2260,2261],{"class":214},"        callback",[171,2263,219],{"class":218},[171,2265,1136],{"class":306},[171,2267,59],{"class":218},[171,2269,1141],{"class":181},[171,2271,406],{"class":218},[171,2273,2274,2276,2278,2280,2282,2285],{"class":173,"line":517},[171,2275,2261],{"class":214},[171,2277,219],{"class":218},[171,2279,1193],{"class":306},[171,2281,59],{"class":218},[171,2283,2284],{"class":181},"\"running\"",[171,2286,406],{"class":218},[171,2288,2289],{"class":173,"line":528},[171,2290,1018],{"class":218},[171,2292,2293],{"class":173,"line":1097},[171,2294,1023],{"class":218},[171,2296,2297],{"class":173,"line":1128},[171,2298,205],{"emptyLinePlaceholder":204},[171,2300,2301,2303,2305],{"class":173,"line":1146},[171,2302,243],{"class":177},[171,2304,332],{"class":214},[171,2306,335],{"class":218},[171,2308,2309],{"class":173,"line":1151},[171,2310,262],{"class":218},[171,2312,2313,2316,2319,2321,2324],{"class":173,"line":1185},[171,2314,2315],{"class":218},"    Robot ",[171,2317,2318],{"class":214},"robot",[171,2320,219],{"class":218},[171,2322,2323],{"class":181},"\"Cyber\"",[171,2325,406],{"class":218},[171,2327,2328,2331,2334],{"class":173,"line":1198},[171,2329,2330],{"class":218},"    robot.",[171,2332,2333],{"class":214},"demo",[171,2335,1873],{"class":218},[171,2337,2338],{"class":173,"line":1203},[171,2339,205],{"emptyLinePlaceholder":204},[171,2341,2342,2344,2346],{"class":173,"line":1212},[171,2343,520],{"class":177},[171,2345,523],{"class":306},[171,2347,313],{"class":218},[171,2349,2351],{"class":173,"line":2350},35,[171,2352,319],{"class":218},[15,2354,2355,537],{},[534,2356,536],{},[162,2358,2361],{"className":2359,"code":2360,"language":543,"meta":167},[541],"Cyber #7: ready\nCyber #8: running\n",[34,2362,2360],{"__ignoreMap":167},[15,2364,2365],{},"The most important thing is:",[162,2367,2369],{"className":164,"code":2368,"language":166,"meta":167,"style":167},"auto callback = std::bind(&Robot::on_message, this, _1, _2);\n",[34,2370,2371],{"__ignoreMap":167},[171,2372,2373,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396],{"class":173,"line":174},[171,2374,2375],{"class":177},"auto",[171,2377,2230],{"class":218},[171,2379,429],{"class":177},[171,2381,225],{"class":214},[171,2383,228],{"class":218},[171,2385,42],{"class":214},[171,2387,219],{"class":218},[171,2389,234],{"class":177},[171,2391,2245],{"class":214},[171,2393,2248],{"class":218},[171,2395,2000],{"class":306},[171,2397,444],{"class":218},[15,2399,2400],{},"把它拆开看：",[82,2402,2403,2412],{},[85,2404,2405],{},[88,2406,2407,2410],{},[91,2408,2409],{"align":93},"parameter",[91,2411,97],{"align":93},[99,2413,2414],{},[88,2415,2416,2421],{},[104,2417,2418],{"align":93},[34,2419,2420],{},"&Robot::on_message",[104,2422,2423],{"align":93},"要调用的成员函数",[15,2425,2426,2427,2429],{},"|",[34,2428,2000],{},"|调用这个成员函数的当前对象|",[15,2431,2426,2432,2426,2434,2437],{},[34,2433,58],{},[34,2435,2436],{},"callback()"," 调用时传入的第一个参数|",[15,2439,2426,2440,2426,2442,2444],{},[34,2441,62],{},[34,2443,2436],{}," 调用时传入的第二个参数|",[15,2446,2447,2448,2450,2451,2453,2454,2456],{},"非静态成员函数不能脱离对象单独调用。",[34,2449,2420],{}," 只说明了“要调用哪个成员函数”，还必须告诉 ",[34,2452,5],{},"“在哪个 ",[34,2455,2245],{}," 对象上调用”。",[15,2458,2459],{},"在类外部，可以写：",[162,2461,2463],{"className":164,"code":2462,"language":166,"meta":167,"style":167},"std::bind(&Robot::on_message, &robot, _1, _2);\n",[34,2464,2465],{"__ignoreMap":167},[171,2466,2467,2469,2471,2473,2475,2477,2479,2481,2483],{"class":173,"line":174},[171,2468,1923],{"class":214},[171,2470,228],{"class":218},[171,2472,42],{"class":214},[171,2474,219],{"class":218},[171,2476,234],{"class":177},[171,2478,2245],{"class":214},[171,2480,2248],{"class":218},[171,2482,234],{"class":177},[171,2484,2485],{"class":218},"robot, _1, _2);\n",[15,2487,2488,2489,2491,2492,2494],{},"而在 ",[34,2490,2245],{}," 自己的成员函数内部，",[34,2493,2000],{}," 就是当前对象的指针，所以可以直接写：",[162,2496,2498],{"className":164,"code":2497,"language":166,"meta":167,"style":167},"std::bind(&Robot::on_message, this, _1, _2);\n",[34,2499,2500],{"__ignoreMap":167},[171,2501,2502,2504,2506,2508,2510,2512,2514,2516,2518],{"class":173,"line":174},[171,2503,1923],{"class":214},[171,2505,228],{"class":218},[171,2507,42],{"class":214},[171,2509,219],{"class":218},[171,2511,234],{"class":177},[171,2513,2245],{"class":214},[171,2515,2248],{"class":218},[171,2517,2000],{"class":306},[171,2519,444],{"class":218},[15,2521,2522],{},"For example:",[162,2524,2526],{"className":164,"code":2525,"language":166,"meta":167,"style":167},"Robot robot(\"Cyber\");\nrobot.demo();\n",[34,2527,2528,2541],{"__ignoreMap":167},[171,2529,2530,2532,2535,2537,2539],{"class":173,"line":174},[171,2531,2245],{"class":214},[171,2533,2534],{"class":214}," robot",[171,2536,219],{"class":218},[171,2538,2323],{"class":181},[171,2540,406],{"class":218},[171,2542,2543,2546,2548],{"class":173,"line":185},[171,2544,2545],{"class":218},"robot.",[171,2547,2333],{"class":214},[171,2549,1873],{"class":218},[15,2551,2552,2553,2556,2557,2560,2561,2563,2564,2566],{},"进入 ",[34,2554,2555],{},"robot.demo()"," 后，",[34,2558,2559],{},"demo()"," 内部的 ",[34,2562,2000],{}," 就指向 ",[34,2565,2318],{},"。",[15,2568,2569],{},"因此：",[162,2571,2573],{"className":164,"code":2572,"language":166,"meta":167,"style":167},"callback(7, \"ready\");\n",[34,2574,2575],{"__ignoreMap":167},[171,2576,2577,2580,2582,2584,2586,2588],{"class":173,"line":174},[171,2578,2579],{"class":214},"callback",[171,2581,219],{"class":218},[171,2583,1136],{"class":306},[171,2585,59],{"class":218},[171,2587,1141],{"class":181},[171,2589,406],{"class":218},[15,2591,2592],{},"可以近似理解成：",[162,2594,2596],{"className":164,"code":2595,"language":166,"meta":167,"style":167},"this->on_message(7, \"ready\");\n",[34,2597,2598],{"__ignoreMap":167},[171,2599,2600,2602,2605,2608,2610,2612,2614,2616],{"class":173,"line":174},[171,2601,2000],{"class":306},[171,2603,2604],{"class":218},"->",[171,2606,2607],{"class":214},"on_message",[171,2609,219],{"class":218},[171,2611,1136],{"class":306},[171,2613,59],{"class":218},[171,2615,1141],{"class":181},[171,2617,406],{"class":218},[15,2619,2620,2621,2623],{},"如果当前对象就是 ",[34,2622,2318],{},"，也就相当于：",[162,2625,2627],{"className":164,"code":2626,"language":166,"meta":167,"style":167},"robot.on_message(7, \"ready\");\n",[34,2628,2629],{"__ignoreMap":167},[171,2630,2631,2633,2635,2637,2639,2641,2643],{"class":173,"line":174},[171,2632,2545],{"class":218},[171,2634,2607],{"class":214},[171,2636,219],{"class":218},[171,2638,1136],{"class":306},[171,2640,59],{"class":218},[171,2642,1141],{"class":181},[171,2644,406],{"class":218},[15,2646,2647],{},"所以这类写法可以记成：",[162,2649,2651],{"className":164,"code":2650,"language":166,"meta":167,"style":167},"std::bind(&类名::成员函数, this, 参数...);\n",[34,2652,2653],{"__ignoreMap":167},[171,2654,2655,2657,2659,2661,2663,2665,2668,2670],{"class":173,"line":174},[171,2656,1923],{"class":214},[171,2658,228],{"class":218},[171,2660,42],{"class":214},[171,2662,219],{"class":218},[171,2664,234],{"class":177},[171,2666,2667],{"class":218},"类名::成员函数, ",[171,2669,2000],{"class":306},[171,2671,2672],{"class":218},", 参数...);\n",[15,2674,2675,2676,2678],{},"其中第二个参数 ",[34,2677,2000],{}," 的作用是：",[2680,2681,2682],"blockquote",{},[15,2683,2684],{},[534,2685,2686,2687,2689],{},"告诉 ",[34,2688,5],{},"：以后调用这个成员函数时，就在当前这个对象上调用。",[15,2691,2692],{},"这也是 ROS2 和 Boost.Asio 中很常见的写法，例如：",[162,2694,2696],{"className":164,"code":2695,"language":166,"meta":167,"style":167},"std::bind(&MyNode::callback, this, _1)\n",[34,2697,2698],{"__ignoreMap":167},[171,2699,2700,2702,2704,2706,2708,2710,2713,2716,2718],{"class":173,"line":174},[171,2701,1923],{"class":214},[171,2703,228],{"class":218},[171,2705,42],{"class":214},[171,2707,219],{"class":218},[171,2709,234],{"class":177},[171,2711,2712],{"class":214},"MyNode",[171,2714,2715],{"class":218},"::callback, ",[171,2717,2000],{"class":306},[171,2719,2720],{"class":218},", _1)\n",[15,2722,2723,2724,2727,2728,2730,2731,2566],{},"它表示把 ",[34,2725,2726],{},"MyNode::callback"," 绑定到当前这个 ",[34,2729,2712],{}," 对象上，再把调用时的第一个参数传给 ",[34,2732,2579],{},[15,2734,2735,2736,2738,2739,2741],{},"需要注意，",[34,2737,2000],{}," 本质上是一个指针。绑定后的回调如果活得比当前对象更久，对象销毁后再调用回调，就可能访问已经失效的 ",[34,2740,2000],{},"，因此异步回调中仍然要注意对象生命周期。",[10,2743,2745],{"id":2744},"key-grammar-explanation","Key Grammar Explanation",[82,2747,2748,2760],{},[85,2749,2750],{},[88,2751,2752,2754,2757],{},[91,2753,94],{"align":93},[91,2755,2756],{"align":93},"Explanation",[91,2758,2759],{"align":93},"Precautions",[99,2761,2762,2776,2788,2802,2815],{},[88,2763,2764,2768,2771],{},[104,2765,2766],{"align":93},[34,2767,58],{},[104,2769,2770],{"align":93},"The first parameter passed when calling a new function",[104,2772,2773,2774],{"align":93},"From ",[34,2775,79],{},[88,2777,2778,2782,2785],{},[104,2779,2780],{"align":93},[34,2781,62],{},[104,2783,2784],{"align":93},"The second parameter passed when calling a new function.",[104,2786,2787],{"align":93},"can be used to adjust the order",[88,2789,2790,2793,2799],{},[104,2791,2792],{"align":93},"constant",[104,2794,2795,2796,2798],{"align":93},"Write directly into the ",[34,2797,42],{}," parameter.",[104,2800,2801],{"align":93},"It will be copied and saved by default.",[88,2803,2804,2809,2812],{},[104,2805,2806],{"align":93},[34,2807,2808],{},"&Class::method",[104,2810,2811],{"align":93},"pointer to member function",[104,2813,2814],{"align":93},"Still need to bind objects later.",[88,2816,2817,2821,2824],{},[104,2818,2819],{"align":93},[34,2820,2000],{},[104,2822,2823],{"align":93},"成员函数内部的当前对象指针",[104,2825,2826],{"align":93},"常作为绑定成员函数时的第二个参数",[15,2828,2426,2829,2832,2833,2836,2837,2839],{},[34,2830,2831],{},"std::ref(x)","|Bind by reference ",[34,2834,2835],{},"x","|Not writing ",[34,2838,1707],{}," usually involves copying.|",[10,2841,2843],{"id":2842},"how-to-choose-between-bind-and-lambda","How to choose between bind and Lambda",[82,2845,2846,2856],{},[85,2847,2848],{},[88,2849,2850,2853],{},[91,2851,2852],{"align":93},"Scene",[91,2854,2855],{"align":93},"Recommendation",[99,2857,2858,2869,2877],{},[88,2859,2860,2863],{},[104,2861,2862],{"align":93},"Simple fixed parameters",[104,2864,2865,2866,2868],{"align":93},"Lambda or ",[34,2867,42],{}," are both fine.",[88,2870,2871,2874],{},[104,2872,2873],{"align":93},"The parameter relationships need to be understood clearly.",[104,2875,2876],{"align":93},"Lambda",[88,2878,2879,2885],{},[104,2880,2881,2882,2884],{"align":93},"Binding member functions to legacy interfaces can be tricky due to how member functions implicitly capture the ",[34,2883,2000],{}," pointer. Below are some common approaches to handle this scenario:",[104,2886],{"align":93},[157,2888,2890],{"id":2889},"_1-use-a-static-member-function-with-a-globalobject-map","1. Use a Static Member Function with a Global\u002FObject Map",[162,2892,2894],{"className":164,"code":2893,"language":166,"meta":167,"style":167},"class MyClass {\npublic:\n    void callback(int data) { \u002F* ... *\u002F }\n\n    static void staticCallback(int data) {\n        \u002F\u002F Retrieve the object instance (e.g., via a map or static member)\n        MyClass* instance = getInstance();\n        instance->callback(data);\n    }\n};\n\n\u002F\u002F Example mapping mechanism (simplified)\nMyClass* MyClass::getInstance() {\n    static MyClass instance;\n    return &instance;\n}\n\n\u002F\u002F Register the static function with the legacy interface\nlegacyRegister(MyClass::staticCallback);\n",[34,2895,2896,2906,2910,2933,2937,2956,2961,2978,2988,2992,2996,3000,3005,3022,3029,3039,3043,3047,3052],{"__ignoreMap":167},[171,2897,2898,2900,2903],{"class":173,"line":174},[171,2899,871],{"class":177},[171,2901,2902],{"class":214}," MyClass",[171,2904,2905],{"class":218}," {\n",[171,2907,2908],{"class":173,"line":185},[171,2909,894],{"class":177},[171,2911,2912,2914,2917,2919,2921,2924,2927,2930],{"class":173,"line":193},[171,2913,935],{"class":177},[171,2915,2916],{"class":214}," callback",[171,2918,219],{"class":218},[171,2920,243],{"class":177},[171,2922,2923],{"class":237}," data",[171,2925,2926],{"class":218},") {",[171,2928,2929],{"class":346}," \u002F* ... *\u002F",[171,2931,2932],{"class":218}," }\n",[171,2934,2935],{"class":173,"line":201},[171,2936,205],{"emptyLinePlaceholder":204},[171,2938,2939,2942,2945,2948,2950,2952,2954],{"class":173,"line":208},[171,2940,2941],{"class":177},"    static",[171,2943,2944],{"class":177}," void",[171,2946,2947],{"class":214}," staticCallback",[171,2949,219],{"class":218},[171,2951,243],{"class":177},[171,2953,2923],{"class":237},[171,2955,1430],{"class":218},[171,2957,2958],{"class":173,"line":259},[171,2959,2960],{"class":346},"        \u002F\u002F Retrieve the object instance (e.g., via a map or static member)\n",[171,2962,2963,2966,2968,2971,2973,2976],{"class":173,"line":265},[171,2964,2965],{"class":218},"        MyClass",[171,2967,1317],{"class":177},[171,2969,2970],{"class":218}," instance ",[171,2972,429],{"class":177},[171,2974,2975],{"class":214}," getInstance",[171,2977,1873],{"class":218},[171,2979,2980,2983,2985],{"class":173,"line":316},[171,2981,2982],{"class":218},"        instance->",[171,2984,2579],{"class":214},[171,2986,2987],{"class":218},"(data);\n",[171,2989,2990],{"class":173,"line":322},[171,2991,1018],{"class":218},[171,2993,2994],{"class":173,"line":327},[171,2995,1023],{"class":218},[171,2997,2998],{"class":173,"line":338},[171,2999,205],{"emptyLinePlaceholder":204},[171,3001,3002],{"class":173,"line":343},[171,3003,3004],{"class":346},"\u002F\u002F Example mapping mechanism (simplified)\n",[171,3006,3007,3010,3012,3014,3016,3019],{"class":173,"line":350},[171,3008,3009],{"class":214},"MyClass",[171,3011,1317],{"class":177},[171,3013,2902],{"class":214},[171,3015,228],{"class":218},[171,3017,3018],{"class":214},"getInstance",[171,3020,3021],{"class":218},"() {\n",[171,3023,3024,3026],{"class":173,"line":366},[171,3025,2941],{"class":177},[171,3027,3028],{"class":218}," MyClass instance;\n",[171,3030,3031,3033,3036],{"class":173,"line":380},[171,3032,520],{"class":177},[171,3034,3035],{"class":177}," &",[171,3037,3038],{"class":218},"instance;\n",[171,3040,3041],{"class":173,"line":385},[171,3042,319],{"class":218},[171,3044,3045],{"class":173,"line":409},[171,3046,205],{"emptyLinePlaceholder":204},[171,3048,3049],{"class":173,"line":414},[171,3050,3051],{"class":346},"\u002F\u002F Register the static function with the legacy interface\n",[171,3053,3054,3057,3059,3061],{"class":173,"line":420},[171,3055,3056],{"class":214},"legacyRegister",[171,3058,219],{"class":218},[171,3060,3009],{"class":214},[171,3062,3063],{"class":218},"::staticCallback);\n",[157,3065,3067],{"id":3066},"_2-use-a-free-function-with-a-capturing-lambda-c11","2. Use a Free Function with a Capturing Lambda (C++11+)",[162,3069,3071],{"className":164,"code":3070,"language":166,"meta":167,"style":167},"MyClass* obj = new MyClass();\n\n\u002F\u002F Wrap the member function in a lambda\nlegacyRegister([obj](int data) {\n    obj->callback(data);\n});\n\n\u002F\u002F Remember to manage object lifetime to avoid dangling pointers.\n",[34,3072,3073,3091,3095,3100,3118,3127,3132,3136],{"__ignoreMap":167},[171,3074,3075,3077,3079,3082,3084,3087,3089],{"class":173,"line":174},[171,3076,3009],{"class":218},[171,3078,1317],{"class":177},[171,3080,3081],{"class":218}," obj ",[171,3083,429],{"class":177},[171,3085,3086],{"class":177}," new",[171,3088,2902],{"class":214},[171,3090,1873],{"class":218},[171,3092,3093],{"class":173,"line":185},[171,3094,205],{"emptyLinePlaceholder":204},[171,3096,3097],{"class":173,"line":193},[171,3098,3099],{"class":346},"\u002F\u002F Wrap the member function in a lambda\n",[171,3101,3102,3104,3107,3109,3112,3114,3116],{"class":173,"line":201},[171,3103,3056],{"class":214},[171,3105,3106],{"class":218},"([",[171,3108,141],{"class":237},[171,3110,3111],{"class":218},"](",[171,3113,243],{"class":177},[171,3115,2923],{"class":237},[171,3117,1430],{"class":218},[171,3119,3120,3123,3125],{"class":173,"line":208},[171,3121,3122],{"class":218},"    obj->",[171,3124,2579],{"class":214},[171,3126,2987],{"class":218},[171,3128,3129],{"class":173,"line":259},[171,3130,3131],{"class":218},"});\n",[171,3133,3134],{"class":173,"line":265},[171,3135,205],{"emptyLinePlaceholder":204},[171,3137,3138],{"class":173,"line":316},[171,3139,3140],{"class":346},"\u002F\u002F Remember to manage object lifetime to avoid dangling pointers.\n",[157,3142,3144,3145,3147],{"id":3143},"_3-use-stdbind-c11","3. Use ",[34,3146,5],{}," (C++11)",[162,3149,3151],{"className":164,"code":3150,"language":166,"meta":167,"style":167},"MyClass obj;\nauto boundFunc = std::bind(&MyClass::callback, &obj, std::placeholders::_1);\nlegacyRegister(boundFunc);\n",[34,3152,3153,3158,3195],{"__ignoreMap":167},[171,3154,3155],{"class":173,"line":174},[171,3156,3157],{"class":218},"MyClass obj;\n",[171,3159,3160,3162,3165,3167,3169,3171,3173,3175,3177,3179,3181,3183,3186,3188,3190,3192],{"class":173,"line":185},[171,3161,2375],{"class":177},[171,3163,3164],{"class":218}," boundFunc ",[171,3166,429],{"class":177},[171,3168,225],{"class":214},[171,3170,228],{"class":218},[171,3172,42],{"class":214},[171,3174,219],{"class":218},[171,3176,234],{"class":177},[171,3178,3009],{"class":214},[171,3180,2715],{"class":218},[171,3182,234],{"class":177},[171,3184,3185],{"class":218},"obj, ",[171,3187,1923],{"class":214},[171,3189,228],{"class":218},[171,3191,360],{"class":214},[171,3193,3194],{"class":218},"::_1);\n",[171,3196,3197,3199],{"class":173,"line":193},[171,3198,3056],{"class":214},[171,3200,3201],{"class":218},"(boundFunc);\n",[157,3203,3205],{"id":3204},"key-considerations","Key Considerations",[19,3207,3208,3214,3220],{},[22,3209,3210,3213],{},[534,3211,3212],{},"Lifetime Management",": Ensure the bound object outlives the callback usage.",[22,3215,3216,3219],{},[534,3217,3218],{},"Thread Safety",": If callbacks occur across threads, synchronize access accordingly.",[22,3221,3222,3225],{},[534,3223,3224],{},"Function Signature",": Match the expected signature of the legacy interface (argument types, return type).",[15,3227,3228,3229,3231,3232,2426],{},"Choose the method that best fits your project's constraints and codebase style. For simple cases, a lambda with explicit capture is often the most readable solution.|",[34,3230,42],{}," is very common, and you can also use Lambda.|\n|Requires complex logic and conditional judgment.|Lambda|\n|Reading old code or ROS2\u002FBoost.Asio examples|Must understand ",[34,3233,42],{},[15,3235,3236,3237,80],{},"In a word: new code prioritizes Lambda; when adapting existing interfaces, legacy project code, or member function callbacks, need to be adept at interpreting ",[34,3238,5],{},[10,3240,3242],{"id":3241},"common-errors","Common Errors",[3244,3245,3246,3251,3259,3262,3265],"ol",{},[22,3247,3248,3249,80],{},"Forgot where the placeholder comes from ",[34,3250,79],{},[22,3252,3253,3254,1235,3256,3258],{},"mistook the order of ",[34,3255,58],{},[34,3257,62],{},", resulting in incorrect actual parameter sequence.",[22,3260,3261],{},"Forgot to bind the object when binding member function.",[22,3263,3264],{},"After binding the object pointer, the object is destroyed first while the callback is still in use.",[22,3266,3267,3268,3270,3271,80],{},"By default, ",[34,3269,42],{}," saves parameters by reference. The default is to copy; when a reference is needed, use ",[34,3272,1707],{},[10,3274,3275],{"id":3275},"使用建议",[19,3277,3278,3281,3284,3287,3290],{},[22,3279,3280],{},"明确目标：在开始前确定您的具体需求，以便选择最合适的工具或教程。",[22,3282,3283],{},"充分利用资源：参考官方文档、教程和博客，这些资料能帮助您快速上手并解决问题。",[22,3285,3286],{},"实践应用：通过动手操作项目或编写代码来巩固学习成果，提升实际操作能力。",[22,3288,3289],{},"问题解决：遇到困难时，查阅参考资料或寻求社区支持，逐步培养独立解决问题的能力。",[22,3291,3292],{},"分享经验：完成项目后，可以撰写文章或博客分享心得，帮助其他学习者。",[15,3294,3295],{},"如果需要针对特定领域（如单片机、机器人或环境搭建）的进一步建议，请提供更多信息，我将为您细化内容。",[3244,3297,3298,3301,3307,3310,3317],{},[22,3299,3300],{},"In the new code, parameter adaptation prioritizes attempting Lambda.",[22,3302,3303,3304,80],{},"When reading ROS2, Boost.Asio, and legacy project code, it's essential to understand ",[34,3305,3306],{},"std::bind(&Class::method, this, _1, _2)",[22,3308,3309],{},"When binding member functions, first and foremost consider the object lifetime.",[22,3311,3312,3313,1708,3315,80],{},"When you need to refer to semantics, explicitly write ",[34,3314,1707],{},[34,3316,1711],{},[22,3318,3319,3320,3322],{},"Avoid creating hard-to-read placeholder combinations just to use ",[34,3321,42],{},". Clarity is more important than showing off.",[10,3324,3326],{"id":3325},"summary","Summary",[19,3328,3329,3334,3341],{},[22,3330,3331,3333],{},[34,3332,5],{}," is used to fix parameters, adjust their order, and bind member functions.",[22,3335,3336,1235,3338,3340],{},[34,3337,58],{},[34,3339,62],{}," indicate the parameter positions passed when calling the new callable.",[22,3342,3343,3344,3346],{},"成员函数中可以把 ",[34,3345,2000],{}," 作为第二个参数，表示把成员函数绑定到当前对象。",[19,3348,3349,3357,3362],{},[22,3350,3351,3353,3354,3356],{},[34,3352,42],{}," copies bound parameters by default; use ",[34,3355,1707],{}," when referencing is needed.",[22,3358,39,3359,3361],{},[34,3360,42],{}," use cases can be replaced with Lambdas.",[22,3363,3364,3365,3367],{},"Understanding ",[34,3366,42],{}," is quite helpful for reading ROS2, Boost.Asio, and legacy C++ projects.",[3369,3370,3371],"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":167,"searchDepth":185,"depth":185,"links":3373},[3374,3375,3376,3385,3386,3393,3394,3395],{"id":12,"depth":185,"text":13},{"id":49,"depth":185,"text":50},{"id":154,"depth":185,"text":155,"children":3377},[3378,3379,3380,3381,3382,3383],{"id":159,"depth":193,"text":160},{"id":548,"depth":193,"text":549},{"id":832,"depth":193,"text":833},{"id":1242,"depth":193,"text":1243},{"id":1698,"depth":193,"text":1699},{"id":1996,"depth":193,"text":3384},"示例 6：在成员函数中使用 this 绑定当前对象",{"id":2744,"depth":185,"text":2745},{"id":2842,"depth":185,"text":2843,"children":3387},[3388,3389,3390,3392],{"id":2889,"depth":193,"text":2890},{"id":3066,"depth":193,"text":3067},{"id":3143,"depth":193,"text":3391},"3. Use std::bind (C++11)",{"id":3204,"depth":193,"text":3205},{"id":3241,"depth":185,"text":3242},{"id":3275,"depth":185,"text":3275},{"id":3325,"depth":185,"text":3326},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","2000-1300","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","en-us:2023-10-05-cplusplus-jiao-xue","\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind",false,null,"en-US","en-us",{},{"title":5,"description":167},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","DyCYCmc7xrVIugYn_Xk-zlRfNzYF-u2z0A-y3_f98f4",[3415,3421,3426,3431,3436,3441,3446,3451,3456,3461,3466,3471,3476,3481,3486,3491,3496,3501,3506,3511,3516,3521,3526,3531,3536,3541,3546,3551,3556,3561,3566,3571,3576,3581,3586,3591,3596,3601,3606,3611,3615,3620,3625,3630,3635,3640,3645,3650,3655,3660,3665,3670,3671,3676,3681,3686,3691,3696,3701,3706,3711,3716,3721,3726,3731,3736,3741,3746,3751,3756,3761,3766,3771,3776,3781,3786,3791,3796,3801,3806,3811,3816,3821,3826],{"path":3416,"stem":3417,"title":3418,"date":3398,"chapterOrder":3419,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++ Development Environment Setup and Testing","0100",0,{"path":3422,"stem":3423,"title":3424,"date":3398,"chapterOrder":3425,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++ Basics","0200",{"path":3427,"stem":3428,"title":3429,"date":3398,"chapterOrder":3430,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","Data Types and Data Storage","0300",{"path":3432,"stem":3433,"title":3434,"date":3398,"chapterOrder":3435,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","Input and Output","0400",{"path":3437,"stem":3438,"title":3439,"date":3398,"chapterOrder":3440,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","operator","0500",{"path":3442,"stem":3443,"title":3444,"date":3398,"chapterOrder":3445,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","program flow structure","0600",{"path":3447,"stem":3448,"title":3449,"date":3398,"chapterOrder":3450,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","array","0700",{"path":3452,"stem":3453,"title":3454,"date":3398,"chapterOrder":3455,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","Functions and Header Files","0800",{"path":3457,"stem":3458,"title":3459,"date":3398,"chapterOrder":3460,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","pointer","0900",{"path":3462,"stem":3463,"title":3464,"date":3398,"chapterOrder":3465,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","Structures and Unions","1000",{"path":3467,"stem":3468,"title":3469,"date":3398,"chapterOrder":3470,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","Memory Partitioning and Lifecycle","1100",{"path":3472,"stem":3473,"title":3474,"date":3398,"chapterOrder":3475,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","reference","1200",{"path":3477,"stem":3478,"title":3479,"date":3398,"chapterOrder":3480,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高","Function Optimization","1300",{"path":3482,"stem":3483,"title":3484,"date":3398,"chapterOrder":3485,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1350-ming-ming-kong-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1350-命名空间","命名空间","1350",{"path":3487,"stem":3488,"title":3489,"date":3398,"chapterOrder":3490,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","encapsulation","1400-0100",{"path":3492,"stem":3493,"title":3494,"date":3398,"chapterOrder":3495,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","Object initialization and cleanup","1400-0200",{"path":3497,"stem":3498,"title":3499,"date":3398,"chapterOrder":3500,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","Object Model and the `this` Pointer","1400-0300",{"path":3502,"stem":3503,"title":3504,"date":3398,"chapterOrder":3505,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","Friends and operator overloading","1400-0400",{"path":3507,"stem":3508,"title":3509,"date":3398,"chapterOrder":3510,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","inheritance","1400-0500",{"path":3512,"stem":3513,"title":3514,"date":3398,"chapterOrder":3515,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","polymorphism","1400-0600",{"path":3517,"stem":3518,"title":3519,"date":3398,"chapterOrder":3520,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","Classes and Objects","1400",{"path":3522,"stem":3523,"title":3524,"date":3398,"chapterOrder":3525,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1450-han-shu-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1450-函数指针","function pointer","1450",{"path":3527,"stem":3528,"title":3529,"date":3398,"chapterOrder":3530,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","File operations","1500",{"path":3532,"stem":3533,"title":3534,"date":3398,"chapterOrder":3535,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","异常处理","1600",{"path":3537,"stem":3538,"title":3539,"date":3398,"chapterOrder":3540,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","template","1700",{"path":3542,"stem":3543,"title":3544,"date":3398,"chapterOrder":3545,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","Introduction to STL","1800-0100",{"path":3547,"stem":3548,"title":3549,"date":3398,"chapterOrder":3550,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":3552,"stem":3553,"title":3554,"date":3398,"chapterOrder":3555,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string container","1800-0300",{"path":3557,"stem":3558,"title":3559,"date":3398,"chapterOrder":3560,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":3562,"stem":3563,"title":3564,"date":3398,"chapterOrder":3565,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":3567,"stem":3568,"title":3569,"date":3398,"chapterOrder":3570,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":3572,"stem":3573,"title":3574,"date":3398,"chapterOrder":3575,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue container","1800-0700",{"path":3577,"stem":3578,"title":3579,"date":3398,"chapterOrder":3580,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":3582,"stem":3583,"title":3584,"date":3398,"chapterOrder":3585,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":3587,"stem":3588,"title":3589,"date":3398,"chapterOrder":3590,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":3592,"stem":3593,"title":3594,"date":3398,"chapterOrder":3595,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","Function objects and predicates","1800-1100",{"path":3597,"stem":3598,"title":3599,"date":3398,"chapterOrder":3600,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","Common algorithms","1800-1200",{"path":3602,"stem":3603,"title":3604,"date":3398,"chapterOrder":3605,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","Level up your programming with STL.","1800",{"path":3607,"stem":3608,"title":3609,"date":3398,"chapterOrder":3610,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++ Type Casting","1900",{"path":3612,"stem":3613,"title":2375,"date":3398,"chapterOrder":3614,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":3616,"stem":3617,"title":3618,"date":3398,"chapterOrder":3619,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":3621,"stem":3622,"title":3623,"date":3398,"chapterOrder":3624,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":3626,"stem":3627,"title":3628,"date":3398,"chapterOrder":3629,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":3631,"stem":3632,"title":3633,"date":3398,"chapterOrder":3634,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","range-based for loop","2000-0500",{"path":3636,"stem":3637,"title":3638,"date":3398,"chapterOrder":3639,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","structured binding","2000-0600",{"path":3641,"stem":3642,"title":3643,"date":3398,"chapterOrder":3644,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":3646,"stem":3647,"title":3648,"date":3398,"chapterOrder":3649,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":3651,"stem":3652,"title":3653,"date":3398,"chapterOrder":3654,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","Smart pointer","2000-0900",{"path":3656,"stem":3657,"title":3658,"date":3398,"chapterOrder":3659,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","Rvalue references and move semantics","2000-1000",{"path":3661,"stem":3662,"title":3663,"date":3398,"chapterOrder":3664,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda expression","2000-1100",{"path":3666,"stem":3667,"title":3668,"date":3398,"chapterOrder":3669,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":3396,"stem":3412,"title":5,"date":3398,"chapterOrder":3397,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},{"path":3672,"stem":3673,"title":3674,"date":3398,"chapterOrder":3675,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":3677,"stem":3678,"title":3679,"date":3398,"chapterOrder":3680,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":3682,"stem":3683,"title":3684,"date":3398,"chapterOrder":3685,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":3687,"stem":3688,"title":3689,"date":3398,"chapterOrder":3690,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":3692,"stem":3693,"title":3694,"date":3398,"chapterOrder":3695,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":3697,"stem":3698,"title":3699,"date":3398,"chapterOrder":3700,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread and join","2000-1900-0100",{"path":3702,"stem":3703,"title":3704,"date":3398,"chapterOrder":3705,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 与 lock_guard","2000-1900-0200",{"path":3707,"stem":3708,"title":3709,"date":3398,"chapterOrder":3710,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":3712,"stem":3713,"title":3714,"date":3398,"chapterOrder":3715,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":3717,"stem":3718,"title":3719,"date":3398,"chapterOrder":3720,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","Concurrent programming","2000-1900",{"path":3722,"stem":3723,"title":3724,"date":3398,"chapterOrder":3725,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":3727,"stem":3728,"title":3729,"date":3398,"chapterOrder":3730,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","Modules Introduction","2000-2100",{"path":3732,"stem":3733,"title":3734,"date":3398,"chapterOrder":3735,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","Modern C++","2000",{"path":3737,"stem":3738,"title":3739,"date":3398,"chapterOrder":3740,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","Timers and Asynchronous I\u002FO","2100-0100-0100",{"path":3742,"stem":3743,"title":3744,"date":3398,"chapterOrder":3745,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio Basics","2100-0100-0200",{"path":3747,"stem":3748,"title":3749,"date":3398,"chapterOrder":3750,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","serial communication","2100-0100-0300",{"path":3752,"stem":3753,"title":3754,"date":3398,"chapterOrder":3755,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP communication","2100-0100-0400",{"path":3757,"stem":3758,"title":3759,"date":3398,"chapterOrder":3760,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP communication","2100-0100-0500",{"path":3762,"stem":3763,"title":3764,"date":3398,"chapterOrder":3765,"chapterDepth":185,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","Robot Engineering Approach and ROS2 Integration","2100-0100-0600",{"path":3767,"stem":3768,"title":3769,"date":3398,"chapterOrder":3770,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio asynchronous IO library","2100-0100",{"path":3772,"stem":3773,"title":3774,"date":3398,"chapterOrder":3775,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen linear algebra library","2100-0200",{"path":3777,"stem":3778,"title":3779,"date":3398,"chapterOrder":3780,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV Computer Vision Library","2100-0300",{"path":3782,"stem":3783,"title":3784,"date":3398,"chapterOrder":3785,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL Point Cloud Library","2100-0400",{"path":3787,"stem":3788,"title":3789,"date":3398,"chapterOrder":3790,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus Lie group and Lie algebra library","2100-0500",{"path":3792,"stem":3793,"title":3794,"date":3398,"chapterOrder":3795,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","Learning Common Libraries","2100",{"path":3797,"stem":3798,"title":3799,"date":3398,"chapterOrder":3800,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets and Build Installation","2200-0100",{"path":3802,"stem":3803,"title":3804,"date":3398,"chapterOrder":3805,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","Top-level CMake and Public Compilation Options","2200-0200",{"path":3807,"stem":3808,"title":3809,"date":3398,"chapterOrder":3810,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","Detailed CMake Explanation for src and lib Modules","2200-0300",{"path":3812,"stem":3813,"title":3814,"date":3398,"chapterOrder":3815,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","How to write third-party library dependencies","2200-0400",{"path":3817,"stem":3818,"title":3819,"date":3398,"chapterOrder":3820,"chapterDepth":174,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","Template Extensions and FAQ","2200-0500",{"path":3822,"stem":3823,"title":3824,"date":3398,"chapterOrder":3825,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":3405},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake Project Template","2200",{"path":3401,"stem":3827,"title":3828,"date":3398,"chapterOrder":3406,"chapterDepth":3420,"docKey":3400,"docRoot":3401,"docTitle":3402,"isWikiDoc":204,"isWikiIndex":204},"_i18n\u002Fen-us\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++ tutorial",{"variants":3830},[3831,3832,3835,3838,3841],{"path":3396,"localeSlug":3408,"i18nKey":3404},{"path":3833,"localeSlug":3834,"i18nKey":3404},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","zh-hant",{"path":3836,"localeSlug":3837,"i18nKey":3404},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","zh-hk",{"path":3839,"localeSlug":3840,"i18nKey":3404},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","zh-tw",{"path":3842,"localeSlug":3843,"i18nKey":3404},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","zh-cn",[3396,3411,3833,3411,3836,3411,3839,3411,3842,3411],1788531351488]