编辑:class TF
的定义:
class TF {
std::vector<V4f> waypoints;
std::vector<int> densityWaypoints;
public:
std::size_t size() const { return waypoints.size(); }
friend std::ostream& operator<<(std::ostream& str, const TF& tf);
friend std::fstream& operator<<(std::fstream& str, const TF& tf);
// methods here
};
这个问题可能源于我不理解流的事实,因此这可能是一个先决条件。
是否可能以某种方式重载operator<<(std::ostream, T)
,以便在为了在屏幕上显示数据结构而调用时,它使用一个重载,当数据结构写入文件时,使用另一个?这样的事情可能是:
std::ostream& operator<<(std::ostream& str, const TF& tf) {
for (std::size_t i = 0; i != tf.waypoints.size(); ++i) {
str << " { "
<< tf.densityWaypoints[i] << " : "
<< tf.waypoints[i][3] << " : "
<< tf.waypoints[i][0] << " , "
<< tf.waypoints[i][1] << " , "
<< tf.waypoints[i][2]
<< " } ";
}
str << "\n";
return str;
}
std::fstream& operator<<(std::fstream& str, const TF& tf) {
str << (int)tf.size();
for (std::size_t i = 0; i != tf.waypoints.size(); ++i) {
str << tf.densityWaypoints[i]
<< tf.waypoints[i][0]
<< tf.waypoints[i][1]
<< tf.waypoints[i][2]
<< tf.waypoints[i][3];
}
这不会编译出一个奇怪的错误(我可能会感到厌倦):
错误:'operator&lt;&lt;'不匹配(操作数类型为'std :: fstream {aka std :: basic_fstream}'和'int')
添加第二个operator<<()
重载时发生错误。第一个工作正常。尝试std::ofstream
和std::fstream
同样的结果。
但我不确定它是否会起作用。当然可以定义像int writeTF(std:fstream& str, const TF&tf)
这样的函数,但这对我来说看起来不够C ++,更不用说这里可能会出现的奇怪错误了。
答案 0 :(得分:1)
我看过代码将ostream
的地址与cout
的地址进行比较。我对此感到好奇,但它肯定有用:
std::ostream& operator<<(std::ostream& o, Foo const&)
{
if(&o == &std::cout) {
return o << "cout";
} else {
return o << "not_cout";
}
}
请注意,cout
输出到标准输出,它与&#34;屏幕&#34;不相同。