2011-07-31 13 views
5

Al buscar en el estándar N3291 No encuentro ninguna referencia para tuple para admitir begin() y end(). Pero cuando miro mis notas de años atrás, me parece haber anotado que necesito analizar eso más tarde. Y aquí estamos.C++ 0x tuplas no tienen iteradores, ¿verdad?

No encuentro ningún rastro de tuple<...>.begin() o tuple<...>.end() en el estándar actual de C++ 0x, ¿es correcto? No es posible pasar una tupla con sus iteradores a un algoritmo, ni uno for -loop, ¿no?

tuple<int,string,double> val; 
for(auto a : val) cerr << val;  // very wrong! 

que es de sentido claro, porque lo que debería ser auto?

Necesito la confirmación de que mis notas contienen un error, y que no hay forma de obtener esos iteradores para los elementos de tupla. ¿O tal vez había un camino abandonado en la discusión de estándares?

Nota: soy consciente de que uno puede utilizar TMP o plantillas variadic para implementar un hacer-para-todos-elementos-of-a-tupla, pero mi pregunta es realmente acerca de iteradores.

+0

¿Por qué no for-loop con índice de 0 a ':: tuple_size' y acceder a los elementos a través de' std :: get '? – osgx

+4

@osgx: ¡El parámetro de plantilla tiene que ser una constante en tiempo de compilación! –

+0

Compruebe esta pregunta y sus respuestas http://stackoverflow.com/q/1198260/196561 – osgx

Respuesta

1

No, no hay iteradores para tuplas. Los iteradores son un concepto de tiempo de ejecución, mientras que las tuplas son una construcción en tiempo de compilación. Como ha señalado con acierto, ni siquiera hay una forma de dar sentido a un iterador de tuplas genérico.

Si necesita un contenedor de tiempo de ejecución de borrado de tipo, puede usar un vector de boost::any s.

+1

Nono, solo quería dar sentido a mis notas. – towi

4

Los iteradores para tuplas serían tan útiles como los iteradores para los miembros de la clase. Las tuplas simplemente no están destinadas a tener ese tipo de contenido - iterable.

+3

Esa es una buena comparación. Aunque, estoy seguro, muchos fanáticos de la reflexión (léase: fanáticos de Java) encuentran iteradores para los miembros de la clase bastante útiles ... ;-) – towi

+1

@towi, oops :) Tiene sus usos allí. – progo