Argumentos variádicos (va_arg) y su tipo por defecto
Cuando uso printf
para imprimir una std::string
en la pantalla, necesito usar "%s"
y la función c_str()
. Me gustaría crear una clase que herede de std::string
y que por defecto devuelva el valor de c_str
como se muestra en el ejemplo a continuación:
class String : public std::string
{
public:
using std::string::string;
operator const char *() const
{
return c_str();
}
};
...
String s = "abc";
printf("%s\n", abc);
No funcionará ya que operator const char *()
no se aplica al tipo de ...
que se utiliza en la función printf
. ¿Alguna idea de cómo hacer esto? const void *'
tampoco funciona.
davy.ai
La solución a este problema es crear una función personalizada similar a
printf
que tome la claseString
como argumento y utilice el operador sobrecargadooperator const char *()
para imprimirlo. Aquí tienes un ejemplo de cómo implementar dicha función:Con esta función, puedes imprimir un objeto
String
de la siguiente manera:Esto llamará a la función
operator const char *()
de la claseString
y pasará el puntero resultanteconst char *
aprintf
, que lo imprimirá como se esperaba.