我可以使用什麼來創建N個參數,其中N在編程時不知道,但在編譯時是固定的(它實際上是模板參數)?獲取N個參數並返回N值的高性能解決方案
有問題的功能是位於性能關鍵路徑的訪問功能,所以我正在尋找儘可能少的開銷。
首先想到的是std::initializer_list
,雖然便宜,但據我所知,它仍然是一個不必要的創建和複製對象。更重要的是,它使用initializer_list::begin[i]
(這是我不關心的另一個對象)來訪問其元素的一種時髦方式,並且不會將參數的數量嚴格限制爲N,但這是一個小問題。
其次,有模板參數包。那些可能是一個可行的候選人?我將不得不使用遞歸來訪問N個值。
是我的目標,因爲我試圖在這個僞代碼顯示:
template<int dim, class T> class linear_searchspace {
template<T...args> operator() (args) {
return std::tie(some_kinda_structure[args[0]], some_kinda_structure[args[1]], some_kinda_structure[args[3]]);
}
};
Hoow我可以把它在一個遞歸形式,將actualy工作?
CLARIFICATION:args
應該是座標。每個座標都是維度中值的索引。所以N個座標被傳遞,N個值將被返回。這就像是同時訪問N個向量。我想爲依賴於參數索引的每個參數添加一個偏移量,因爲它存儲的是一個數組,其索引與參數的索引相對應。計算將是簡單的算術。
什麼是適當的返回類型?這個訪問的結構最可能保存數值,元組。 std::tuple
是我能做的最好的或者是否可以製造更高性能的東西?
關於參數,什麼都可以,甚至是宏。我很高興聽到你多年來想出了什麼招數。
這很大程度上取決於你如何使用'arg s'。 – 2014-10-19 14:40:15
目前還不清楚你想從功能中返回什麼?也許矢量是好的,比initializer_list是你的朋友 – Ation 2014-10-19 14:45:12
C++ 11或C++ 14? – Columbo 2014-10-19 14:45:50