Прежде всего, чтобы придерживаться стандартных соглашений, ваш operator<<
должен быть объявлен так:
class A {
A& operator<<(const std::string&);
};
Теперь технически вы можете достичь части того, что вы хотите, реализовав следующую глобальную функцию:
A * operator<< ( A * a, const std::string& s ) { (*a) << s; return a; }
Это позволило бы такие утверждения, как:
string s = "this will be printed."; aPointer << s;
aPointer << string("this will be printed");
Однако вы не сможете написать следующее:
aPointer << "this will not compile.";
В любом случае, написание такого оператора будет запутанным, в лучшем случае . Вы должны жить с более простым синтаксисом
(*aPointer) << "this will be printed.";
и напишите код, который придерживается установленных соглашений, чтобы позволить другим (и вам самим, через несколько недель) прочитать ваш код.