visual studio microsoft español descargar community c++ c++11 const tuples

c++ - microsoft - visual studio installer



¿Cómo consultar una constexpr std:: tuple en tiempo de compilación? (2)

En C ++ 0x, se puede crear una constexpr std :: tuple, por ejemplo, como

#include <tuple> constexpr int i = 10; constexpr float f = 2.4f; constexpr double d = -10.4; constexpr std::tuple<int, float, double> tup(i, f, d);

También se puede consultar un std :: tuple en tiempo de ejecución, por ejemplo, a través de

int i2 = std::get<0>(tup);

Pero no es posible consultarlo en tiempo de compilación, por ejemplo,

constexpr int i2 = std::get<0>(tup);

lanzará un error de compilación (al menos con la última instantánea de g ++ 2011-02-19).

¿Hay alguna otra manera de consultar una constexpr std :: tuple en tiempo de compilación?

Y si no es así, ¿hay alguna razón conceptual por la que se supone que uno no debe consultarla?

(Soy consciente de evitar el uso de std :: tuple, por ejemplo, al usar boost :: mpl o boost :: fusion, pero de alguna manera suena mal no usar la clase de tuplas en el nuevo estándar ...).

Por cierto, ¿alguien sabe por qué?

constexpr std::tuple<int, float, double> tup(i, f, d);

compila bien, pero

constexpr std::tuple<int, float, double> tup(10, 2.4f, -10.4);

¿no?

¡Muchas gracias por adelantado! - lars


Todavía no he trabajado con C ++ 0x, pero me parece que std :: get () es una función, en lugar de la expresión que el compilador puede interpretar directamente. Como tal, no tiene sentido, excepto en el tiempo de ejecución, después de que la función se haya compilado.


std::get no está marcado como constexpr , por lo que no puede usarlo para recuperar los valores de una tuple en un contexto constexpr , incluso si esa tupla es en sí misma constexpr .

Desafortunadamente, la implementación de std::tuple es opaca, por lo que tampoco puede escribir sus propios accesores.