Estoy buscando una manera fácil de crear una matriz de cadenas en tiempo de compilación. Para una prueba, he creado una clase llamada Strings
que tiene los siguientes miembros:Abusar del operador de coma
Strings();
Strings(const Strings& that);
Strings(const char* s1);
Strings& operator=(const char* s1);
Strings& operator,(const char* s2);
Usando esto, puedo compilar correctamente código como este:
Strings s;
s="Hello","World!";
La parte s="Hello"
invoca el operator=
que devuelve a Strings&
y luego se llama al operator,
para "World!"
.
Lo que no puedo ir a trabajar (en MSVC, no he probado otros compiladores aún) es
Strings s="Hello","World!";
Me asumir aquí que Strings s="Hello"
llamarían el constructor de copia y luego todo se comportarían lo mismo que el primer ejemplo. Pero me sale el error: error C2059: syntax error : 'string'
Sin embargo, esto funciona bien:
Strings s="Hello";
así que sé que el constructor de copia hace al menos trabajo para una cadena. ¿Algunas ideas? Me gustaría que el segundo método funcione solo para que el código sea un poco más limpio.
Wow, he escuchado muchas bromas sobre la sobrecarga del operador de coma. Nunca esperé que alguien realmente ** lo hiciera **. –
@Carl: ¿Qué hay de http://www.boost.org/doc/libs/1_40_0/libs/assign/doc/index.html#intro (muy parecido a algo que OP quiere) – UncleBens
* estremecimiento * Poner las uñas en su propio ataúd. ¿Cómo vas a depurar esto cuando empiece a ir mal? –