为什么基于 int 的访问不适用于 std::get(std::tuple)?



Visual Studio 2017在"std::get"下加了红色下划线,因此程序无法编译。我该怎么做才能让它正常工作?

一个片段:

std::tuple<int, int, int>t;
t = {1,1,1};
int a = 0;
int b = std::get<a>(t);

模板参数在编译时求值。您可以使用constexpr来修复错误,使编译器可以在编译时评估a的值。

std::tuple<int, int, int> t;
t = {1, 1, 1};
constexpr int a = 0;
int b = std::get<a>(t);

或者,如果元组只包含一种类型的元素,则可以将其替换为std::arraystd::vector(或任何类似的容器(,并在运行时执行下标。

std::array<int, 3> array;
t = {1, 1, 1};
int a = 0;
int b = array[a];

get是一个模板,因此a必须在编译时已知,因此它应该是constexpr

constexpr int a = 0;

最新更新