#c #operator-keyword
Вопрос:
Мой класс определяет оператор преобразования:
class A{
public:
operator string(){
return "AAA";
}
};
// I don't want to overload this one
// ostreamamp; operator <<(ostreamamp; os, Aamp;){
// return os << "BBB";
// }
int main() {
A a;
string s(a);
cout<<s;
cout<<a;
}
Я хочу, чтобы оператор вставки неявно преобразовывался a
в string
перед отправкой его на вывод. Но компилятор отказывается:
error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'A')
cout<<a;
~~~~^~~
за этим последовала куча неудачных попыток преобразования a
в какой — то тип, которого я не ожидаю.
Как я могу сообщить ему, чтобы он попробовал этот string
тип?
Комментарии:
1. Почему ты не хочешь перегрузки?
2. Может быть, это может быть полезно: cout<;
3. Попробуйте это:
operator const char*(){ return "AAA"; }
.4. @InQusitive, потому
std::string
что это не часть перегрузокstd::ostream::operator<<
, ноconst char*
есть.5. @jerron » Я не хочу перегружать [оператор<<] » — почему? Вы не объяснили свою причину. Перегрузка оператора-это правильный способ потоковой передачи пользовательских типов. Ничто не мешает вашей перегрузке использовать ваш оператор преобразования внутри компании.