以下最小示例编译为g++ -std=c++11 -Wall tuple.cpp -o tuple
:
#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)