Как разрешить оператору вставки <

#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 » Я не хочу перегружать [оператор<<] » — почему? Вы не объяснили свою причину. Перегрузка оператора-это правильный способ потоковой передачи пользовательских типов. Ничто не мешает вашей перегрузке использовать ваш оператор преобразования внутри компании.