[英]Expand a parameter pack with a counter
我想將一個參數包擴展為函數調用,如下所示:
func(get_value(arg)...);
其中func和get_value是兩個函數。 問題是get_value對評估順序很敏感,所以我認為一個解決方案是生成這樣的東西:
func(get_value(arg0, 0), get_value(arg1, 1), get_value(arg2, 2));
例如,如果有三個參數。 有了這個計數器,我就會知道評估順序。 這有辦法嗎?
或者作為另一種解決方案,有沒有辦法簡單地用args指定那些調用get_value的評估順序? (如果是這樣,我甚至不需要櫃台。)
您可以將參數包“壓縮”在一起。 所以,像這樣,使用seq
的定義從這里 :
template <typename ... Args, int ... N>
void F(Args... args, seq<N...>)
{
func(get_value(args, N)...);
}
template <typename ... Args>
void FHelper(Args&&... args)
{
F(std::forward<Args>(args)..., typename gens<sizeof...(Args)>::type ());
}
你會打電話給FHelper
。
一個更簡單的解決方案,在get_value
具有固定返回類型的情況下,將更改func以將initializer_list
作為輸入並像這樣調用它:
func({get_value(args)...});
這保留了調用順序,因為初始化列表中的逗號是序列點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.