一千萬個為什麽

搜索

C ++ 11工廠模式與lambdas

匿名函數是C ++ 11的最佳功能之一。他們讓一切都如此美麗! 然而,人們可能會被帶走並開始過度使用它們。

此代碼調用一個函數,該函數讀取文件並在每次匹配正則表達式時調用回調。由於我讀了兩個不同的文件,但我希望回調僅針對常量不同,我選擇了這個“lambda-returning-lambda”工廠模式。 auto callbackfactory = & -> std::function&)> { return &,start,stop{ markers.pushback(IPMarker(node.ip, start));
markers.pushback(IPMarker(node.ip.networkones(node.prefix), stop)); }; };

readregexp("C:\path\to\file1.txt", regex, callbackfactory(ipmaopen,ipmaclose)); readregexp("C:\path\to\file2.txt", regex, callbackfactory(ipmbopen,ipmbclose));

回調對於調用函數來說實際上是局部的,所以我認為外部函子不合理。另一方面,這段代碼對我來說很多,所以我想聽聽你的意見。

最佳答案

First of all, I will assume there is something like template somewhere in your code. Otherwise, I doubt it would compile. 您可以采取一些措施來改進程序:使用 \ templaceback 代替 pushback 和對象構造。這樣,對象將在集合中創建( list , vector 等...)。順便說一句,我還假設 markers 是一個標準集合。 auto callbackfactory = & -> std::function&)> { return &,start,stop{ markers.emplaceback(node.ip, start);
markers.emplaceback(node.ip.networkones(node.prefix), stop); }; };

並且,是的,還有一些東西仍然聞起來:我真的很想知道你和/或你在哪裏聲明 markers 。如果它是一個全局變量,那麽我認為模板參數可能會導致一些問題。

轉載註明原文: C ++ 11工廠模式與lambdas