parse - anulación de String en C++
to_string is not a member of std (4)
Esta pregunta ya tiene una respuesta aquí:
- C ++ equivalente de java.toString? 5 respuestas
En Java, cuando una clase anula a .toString()
y usted hace System.out.println()
lo usará.
class MyObj {
public String toString() { return "Hi"; }
}
...
x = new MyObj();
System.out.println(x); // prints Hi
¿Cómo puedo lograr eso en C ++, por lo que:
Object x = new Object();
std::cout << *x << endl;
¿Producirá alguna representación significativa de cadenas que elegí para Object
?
Alternativa a la solución de Erik puede anular el operador de conversión de cadena.
class MyObj {
public:
operator std::string() const { return "Hi"; }
}
Con este enfoque, puede usar sus objetos siempre que se necesite una salida de cadena. No estás restringido a las transmisiones.
Sin embargo, este tipo de operadores de conversión pueden generar conversiones involuntarias y errores difíciles de rastrear. Recomiendo usar esto solo con clases que tengan semántica de texto, como una Path
, un nombre de SerialCode
y un SerialCode
.
Aunque la anulación de operador es una buena solución, me siento cómodo con algo más simple como el siguiente (que también parece ser más probable que sea Java):
char* MyClass::toString() {
char* s = new char[MAX_STR_LEN];
sprintf_s(s, MAX_STR_LEN,
"Value of var1=%d /nValue of var2=%d/n",
var1, var2);
return s;
}
class MyClass {
friend std::ostream & operator<<(std::ostream & _stream, MyClass const & mc) {
_stream << mc.m_sample_ivar << '' '' << mc.m_sample_fvar << std::endl;
}
int m_sample_ivar;
float m_sample_fvar;
};
std::ostream & operator<<(std::ostream & Str, Object const & v) {
// print something from v to str, e.g: Str << v.getX();
return Str;
}
Si escribe esto en un archivo de encabezado, recuerde marcar la función en línea: inline std::ostream & operator<<(...
(Consulte las preguntas más frecuentes en C ++ para conocer los motivos ).