У меня есть класс с оператором преобразования до std::string
. Он отлично работает со всем, кроме функций, получающих std::basic_string<T>
(с шаблоном на 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 a;
F(a); // Works!
G(a); // Error!
return 0; // because otherwise I'll get a lot of comments :)
}
Ошибка я получаю это
error: no matching function for call to 'G(A&)'
note: candidate is:
note: template<class T> void G(const std::basic_string<_CharT>&)
Теперь я знаю, что может определить G
как друга в структурах A
, и он будет работать, но моя проблема с большим количеством функций СТЛИ которые уже существует и получать std::basic_string<T>
(например, функция operator<<
печати, или оператор сравнения, или многие другие функции.
Я бы очень хотел, чтобы иметь возможность использовать A
, как если бы это было std::string
. Есть какой-либо способ сделать это?
Проблема заключается в том, что T необходимо вывести для 'G' и что он не работает так (принимая во внимание функции преобразования). 'G (a);' будет работать, но я полагаю, это не то, что вы хотите. –
jrok
Да, 'G ((std :: string) a)' также работает, но оба из них на самом деле не режут его. Я хочу что-то, что будет короче/лучше, чем просто добавить функцию 'str()' member вместо оператора преобразования. – rabensky
Вам лучше сделать метод ToString. –