Q
拆包
2
A
回答
3
這其實很簡單: 你可以把任意表達式的可變參數模板參數包的解包內:
obj.apply(someFilter(arg))...
這會給你的obj.apply
爲昏迷分隔列表的結果。然後您可以將其傳遞給虛擬函數:
template<typename... Args> swallow (Args&&...) {}
swallow(obj.apply(someFilter(arg))...);
要吞下逗號分隔列表。
當然,這假設obj.apply
返回某種對象。如果沒有,你可以使用
swallow((obj.apply(someFilter(arg)), 0)...);
,使實際(非void
)參數
如果你不知道什麼obj.apply`返回(結果可能重載逗號操作符),您可以禁用使用自定義的逗號操作符的使用
swallow((obj.apply(someFilter(arg)), void(), 0)...);
如果您確實需要評估,以便在項目(這似乎不是來自這個問題很有可能),你可以濫用數組初始化語法,而不是使用一個函數調用:
using Alias=char[];
Alias{ (apply(someFilter(args)), void(), '\0')... };
0
我假設代碼有多個arg
s作爲參數包?嘗試:
obj.apply(someFilter(arg)...);
爲參數拆包適用於表達,所以參數包獲取的每個元素擴展到someFilter(arg)
。
0
這裏是做對的參數組動作的任意一組健壯的方式。它遵循最小驚訝的原則,不會爲了操作:
template<typename Lambda, typename Lambdas>
void do_in_order(Lambda&& lambda, Lambdas&& lambdas)
{
std::forward<Lambda>(lambda)();
do_in_order(std::forward<Lambdas>(lambdas)...);
}
void do_in_order() {}
template<typename Args>
void test(Args&& args) {
do_in_order([&](){obj.apply(someFilter(std::forward<Args>(args)));}...);
}
基本上,你在do_in_order
送了一堆的lambda表達式,其中前評估他們回來。
相關問題
- 1. 拆下包裝
- 2. 元組拆包
- 3. 包裝和拆包字典
- 4. 包裝拉開打包拆箱?
- 5. RTP AAC數據包拆包器
- 6. 拆分python數據包?
- 7. 序列拆包原子?
- 8. 矢量拆包倍頻
- 9. Webpack - 合併拆分包
- 10. Webpack包拆分commonschunk插件
- 11. Python的值拆包錯誤
- 12. For循環項目拆包
- 13. 拆包元組在字典
- 14. 拆分包含R中
- 15. 拆包參數數組在PHP
- 16. 將包裝類拆箱到var-arg
- 17. 蟒蛇期貨和元組拆包
- 18. 的Weblogic 10.3域拆包問題
- 19. 將數組作爲參數拆包
- 20. 格式字符串拆包列表
- 21. NPM拆封包含本地主機
- 22. 拆分Laravel 5.3應用程序包
- 23. 函數參數拆包錯誤
- 24. 蟒蛇類作爲映射**拆包
- 25. 將字符串包名與類拆分
- 26. 「拆散」包含列表爲多行
- 27. 圖書館拆包MySQL BLOBS c#
- 28. 拆分MYSQL結果包含每片
- 29. 元組拆包列表建設(python3)
- 30. Python的`map`和參數拆包
當你說開箱時,你的意思是你的單參數'arg'應該被解壓到多個參數中? – souldzin 2013-03-07 16:53:57