I am writing a class which I want to be converted into a string.
Should I do it like this:
std::string toString() const;
Or like this:
operator std::string() const;
What way is more accepted?
The classes that have a "string" representation in the standard library (like std::stringstream, for example) use .str()
as a member function to return a text. If you want to be able to use your class into generic code as well, better to use the same convention (toString
is "Javanese" and ToString
"Sharpish").
About the use of a conversion operator, that makes sense only if your class is specifically designed to interwork with strings in string expressions (converting to a string is in fact a "promotion", like a int
becoming long
implicitly).
If your class "demotes" into a string (loses information in doing so), better to have the cast operator explicit (explicit operator std::string() const
).
If it is unrelated with string semantics, and just has to be occasionally converted, consider explicitly named functions.
Note that, if a
is a variable, the semantics you have to think about its usage are:
a.str(); // invoking a member function
// mimics std::stringstream, and std::match_results
to_string(a); // by means of a free function
// mimics number-to-text conversions
std::string(a) // by means of an explicit cast operator
// mimics std::string construction
If your class has nothing to do with strings, but only has to participate in I/O, then consider the idea not to convert to string, but to write to a stream, by means of a...
friend std::ostream& operator<<(std::ostream& stream, const yourclass& yourclass)
so that you can do...
std::cout << a;
std::stringstream ss;
ss << a; // this makes a-to-text, even respecting locale informations.
...maybe even without the need to allocate any string-related memory.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With