以下最小示例編譯與g++ -std=c++11 -Wall tuple.cpp -o tuple
:訪問元組元素中經由編譯時間變量C++ 11在功能
#include <tuple>
#include <iostream>
template<int i>
char get_elem_i(std::tuple<char, char> t)
{
return std::get<i>(t);
}
int main()
{
std::tuple<char, char> t('H','i');
char c = get_elem_i<0>(t);
std::cout << "The char is: " << c << std::endl;
}
現在,我不想使用模板指定的索引(確切的原因爲什麼:我有自動推導出的模板,我不想將它們全部指定)。所以我的第一次嘗試是:
char get_elem_i(int i, std::tuple<char, char> t)
{
return std::get<i>(t);
}
據我所知,這不能編譯。有沒有什麼辦法可以保證編譯器在編譯時會知道i
?也許這樣?
char get_elem_i(compile_time_known int i, std::tuple<char, char> t)
」該函數的返回類型是什麼?「我會說這實際上不是問題 - 你可以使用'auto ... - > decltype(...)'類型的函數聲明來解決這個問題。問題是'int i'參數被用作'std :: get '中的模板參數。 – 2013-05-07 17:28:45
@TimothyShields:當然,decltype的結果是什麼?一個變種? __reason__表示'i'是一個模板參數,因爲'std :: get'的返回類型根據該輸入而變化。 – 2013-05-07 17:30:29
@TimothyShields:我也同意我的中間函數不能編譯。這是爲了解釋在一般情況下'i'需要成爲模板參數。 – 2013-05-07 17:32:26