Comment obtenir le i-ème élément à partir d'un std::tuple quand je ne sais pas au moment de la compilation?

J'ai une variable i de type std::size_t et un tuple de type std::tuple. Je veux obtenir le i-ème élément du tuple. J'ai essayé ceci:

//bindings... is of type const T&...
auto bindings_tuple = std::make_tuple(bindings...);
auto binding = std::tuple_element<i, const T&...>(bindings_tuple);

Mais j'obtiens cette erreur de compilation en disant que le premier argument de modèle doit être une expression constante:

erreur: non-type de modèle argument de type 'std::size_t' (aka 'unsigned long') n'est pas une partie intégrante expression constante

Est-il possible d'obtenir le i-ième élément d'un tuple, et comment le faire?


je voudrais le faire sans l'aide de boost, si possible.

Je pense que c'est une forte indication que vous avez besoin d'utiliser un vecteur, pas un n-uplet.
le problème avec les vecteurs (et tableaux), c'est que tous les éléments doivent être du même type.
Sauf si c'est un vecteur d'objets?
Vous avez besoin de connaître le type à la compilation. Vous connaissez l'index au moment de la compilation, ou avoir tous les éléments du même type. Il n'y a pas moyen de contourner cela.
Il ya quelque chose de mal quand la situation se présente. Un n-uplets de type doit être connu au moment de la compilation, comment pouvez-vous ne pas savoir de quel type d'accès au moment de la compilation? Vous ne serait même pas capable d'écrire ce que cette fonction est supposée retourner.

OriginalL'auteur | 2011-11-19