3
我正在使用第三方提供的C++类,因此无法对其进行修改。它有很多属性,但没有方法或运算符重载(<<
)来创建格式化输出。我可以编写一个简单地返回一个字符串的函数,但是有没有更好的C++方法来创建格式化输出而不修改类?C++格式化程序类?
我正在使用第三方提供的C++类,因此无法对其进行修改。它有很多属性,但没有方法或运算符重载(<<
)来创建格式化输出。我可以编写一个简单地返回一个字符串的函数,但是有没有更好的C++方法来创建格式化输出而不修改类?C++格式化程序类?
是的。您可以将流式插入操作符重载为非成员函数。当然,缺点是你不能把这个功能变成一个朋友(这是经常这样做的),所以你不能输出任何不通过公共访问者输出的东西 - 但是你受限于如果你不能修改课程,不管你做什么。
例子:
class Foo {
public:
std::string name() const;
int number() const;
private:
// Don't care about what's in here; can't access it anyway.
};
// You write this part:
std::ostream& operator<< (std::ostream& os, const Foo& foo) {
// Format however you like in here, e.g.
os << "(" << foo.name() << "," << foo.number() << ")";
return os;
}
// Then you can write:
Foo foo;
std::out << foo;
的'运营商<<'与'的std :: ostream'使用不能是一个成员函数反正...为什么你认为你不能写自己的? – 2011-05-14 22:42:53
@詹姆斯麦克奈利斯:在这种情况下,它几乎肯定不适用,但我可以想象这样一种病态情况:想要通过其公共接口无法访问的不可修改的类的私有成员产生输出。 – 2011-05-14 22:53:27