Я борюсь с перегрузкой оператора, так как хочу, чтобы он разрешал цепочку
class A{
int a;
public:
void doSomething(char *str);
A operator<<(char *str);
}
Итак, у меня есть этот класс, и я могу взять строку и сделать что-то, что не важно для этого вопроса.
Что я сейчас мог сделать, так это
A *counter = new A();
counter->doSomething("hello");
Если я реализую перегруженный оператор сдвига
A A::operator<<(char *str)
{
this->doSomething(str);
return this;
}
Я могу написать это так
A *counter = new A();
(*counter) << "hello";
Надеюсь, я не ошибся здесь, потому что теперь мне интересно, как я мог разрешить цепочку
(*counter) << "hello" << "test";
Я знаю, что с цепочкой это сделает это
(*counter).operator<<("hello" << "test");
что явно не имеет никакого смысла, поскольку есть два массива строк/символов. Но я знаю, что есть способ сделать это. Я гуглил, но каждый вопрос касался только объединения экземпляров одного типа.
то, что я тогда пытался, заключалось в том, чтобы поместить два аргумента в функцию и добавить ее в качестве друга ... Я не уверен, но, возможно, мне нужно создать новый перегруженный оператор с типом char*
или потоковым объектом и сделать его другом A
?
Спасибо, что помогли мне, я думаю, должен быть простой ответ, которого я сейчас не вижу.
const char*
. - person Tony Delroy   schedule 22.07.2013