c++ - conversion operator with template functions -
i have class conversion operator std::string
. works great except functions receiving std::basic_string<t>
(templated on t
).
#include <string> struct a{ operator std::string(){return std::string();} }; void f(const std::basic_string<char> &){} template<typename t> void g(const std::basic_string<t> &) {} int main(){ a; f(a); // works! g(a); // error! return 0; // because otherwise i'll lot of comments :) }
the error receive
error: no matching function call 'g(a&)' note: candidate is: note: template<class t> void g(const std::basic_string<_chart>&)
now, know can define g
friend in struct a
, it'll work, problem lot of stl functions exist , receive std::basic_string<t>
(for example, operator<<
printing function, or comparison operators, or many other functions.
i able use a
if std::string
. there way this?
i able use if
std::string
. there way this?
yes, sure want this? solution is:
struct : public std::string { };
but recall std::string
doesn't have virtual
destructor , therefore, cannot used polymorphically. you have been warned!!!
a str()
far better solution , allows explicit when want pass a
function taking std::basic_string<t>
.
Comments
Post a Comment