簡體   English   中英

使用計數器展開參數包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM