可以将以下代码(我只保留相关部分)转换为使用静态成员函数而不是友元免费函数吗?如果不是,为什么不呢?我试图将它转换为以多种不同的方式使用静态成员函数并且失败了(对于不同的变体不断得到不同的编译器错误),但我从这个问题的答案中收集到你可以使用任何一个来做同样的事情。由于 C++ 语法的某些属性,这在技术上不是真的吗?我在哪里错了?
class Tape {
public:
friend std::ostream &operator<<(std::ostream &, Tape &);
private:
char blank;
size_t head;
std::string tape;
}
std::ostream &operator<<(std::ostream &out, Tape &tape) {
out << tape.tape << std::endl;
for (size_t i = 0; i < tape.head; i++)
out << ' ';
out << '^' << std::endl;
return out;
}