[英]How to pass in variadic list of parameters to a function that takes in variable parameters?
我有一個模板參數包,我想將它傳遞給一個接受可變數量參數的函數。 由於我不知道我實際有多少個參數,如何將未知數量的參數數據成員傳入函數?
template <typename BarType...>
Class Test
{
explicit Test(BarType ...bars)
{
// Calling this function with parameter pack instead of this way
// (which won't even work with above parameter pack)
FooFunction(
[](BarType &bar1){ return bar1.bar_member; },
[](BarType &bar2){ return bar2.bar_member; },
[](BarType &bar3){ return bar3.bar_member; })
}
}
如何在不手動列出所有三個參數(使其更具動態性)的情況下完成上述FooFunction
? 由於可能有更多參數bar4
、 bar5
等。因此僅手動列出它們是行不通的。
看起來你可能想要:
template <typename BarType...>
Class Test
{
explicit Test(BarType ...bars)
{
FooFunction(bars.bar_member ...);
}
};
使用參數包的最常見方法是擴展它,通過在列表的每個元素中放置一個表示應該是什么,然后是省略號標記...
。
因此,如果我們采用專業化Test<B1, B2, B3>
,它有一個像explicit Test(B1 b1, B2 b2, B3 b3);
這樣的構造函數explicit Test(B1 b1, B2 b2, B3 b3);
除了名稱b1
、 b2
和b3
只是為了解釋而組成的。 在該函數體中,一些可能涉及包擴展的事情以及它們將實例化為:
std::make_tuple(bars...) -> std::make_tuple(b1, b2, b3)
std::tuple<BarType...> -> std::tuple<B1, B2, B3>
f(g(bars) ...) -> f(g(b1), g(b2), g(b3))
h<BarType>(bars)... -> h<B1>(b1), h<B2>(b2), h<B3>(b3)
最后一個將模板參數包BarType
和函數參數包bars
擴展到一起,匹配相應的包元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.