2010-07-30 8 views
3

Je dépassais C++ 0x. Comme j'ai regardé tuple j'ai vu cet exemple. Pourquoi dois-je faire get<3>(var)? Pourquoi ne puis-je pas faire var.get(index) ou var.get<index>()? Je les préfère pour que le code soit cohérent.Pourquoi ne puis-je pas tupleVar.get (3) ou .get <3>()?

typedef tuple< int, double, long &, const char * > test_tuple ; 
long lengthy = 12 ; 
test_tuple proof(18, 6.5, lengthy, "Ciao!") ; 
lengthy = get<0>(proof) ; // Assign to 'lengthy' the value 18. 
get<3>(proof) = " Beautiful!" ; // Modify the tuple’s fourth element. 

Répondre

6

Vous devez utiliser get<0> parce que le tuple a un type différent pour chacun de ses membres. Par conséquent le type de résultat de get<0> est int, get<1> est double, get<2> est long& etc Vous ne pouvez pas réaliser cela lorsque vous appelez get(0) car il doit avoir un type de retour fixe.

Vous pouvez également jeter un oeil à la métaprogrammation de modèle parce que ce modèle est l'un des fondamentaux dans toute cette partie de la programmation.

http://en.wikipedia.org/wiki/Template_metaprogramming
http://www.boost.org/doc/libs/1_43_0/libs/mpl/doc/index.html

+0

oh ouais ... J'ai complètement oublié. Je savais que mon C++ était rouillé. Merci pour le rappel majeur. –

+0

Et bien sûr, la raison pour laquelle vous * pouvez * écrire 'var [3]' en Python est que c'est un langage typé dynamiquement. – dan04