簡體   English   中英

在C ++中,可以使用一個函數來修改可變長度的元組嗎?

[英]In C++, can you have a function that modifies a tuple of variable length?

在C ++ 0x中,我想編寫如下函數:

template <typename... Types>
void fun(typename std::tuple<Types...> my_tuple) {
    //Put things into the tuple
}

我首先嘗試在int i上使用for循環,然后執行以下操作:

get<i>(my_tuple);

然后在結果中存儲一些值。 但是, get僅可在constexpr

如果我可以從tuple獲取變量並將其傳遞給可變參數的模板化函數,則可以很容易地遍歷參數,但是我不知道如何在沒有get的情況下從元組中get變量。 關於如何做到這一點的任何想法? 還是有人有其他修改此tuple

由於“ i”在

get<i>(tup)

需要是一個編譯時常量,模板實例用於通過值“迭代”(實際上是遞歸)。 Boost元組具有“長度”和“元素”元功能,在這里可能會有所幫助-我認為C ++ 0x也具有這些功能。

Boost.Fusion值得一看。 它可以在std::pairboost::tuple ,其他一些容器及其自己的元組類型上“迭代”,盡管我認為它尚不支持std::tuple

看看TR1的6.1.3.4節, http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf

為const和非const限定元組都定義了get,並返回適當的引用類型。 如果將函數聲明更改為以下內容:

template 
void fun(typename std::tuple& my_tuple) {
    //Put things into the tuple
}

然后,函數的參數是一個非常量元組,一旦使用先前響應中提供的信息編寫了迭代,get便可以讓您進行必要的賦值。

AFAICT,C ++元組基本上需要遞歸處理; 除了使用類型系統唯一的可變參數模板處理之外,似乎沒有任何真正的打包/拆包元組的方法。

請看一下我在這里的答案,以了解一個模板遞歸示例,以將元組參數展開為函數調用。

如何將元組擴展為可變參數模板函數的參數?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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