[英]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::pair
, boost::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.