Edit: Определение class TF
:Возможно ли иметь разные операторы <<() перегрузки для записи в файл и std :: cout?
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];
}
Это не компилируется со странной ошибкой (Может быть, я устал):
error: no match for ‘operator<<’ (operand types are ‘std::fstream {aka std::basic_fstream}’ and ‘int’)
Ошибка возникает при добавлении второй operator<<()
перегрузки. Первый работает отлично. Пробовал и std::ofstream
, и std::fstream
к тому же результату.
Но я не уверен, что это сработает. Конечно, можно определить такую функцию, как int writeTF(std:fstream& str, const TF&tf)
, но это не похоже на C++ для меня, не говоря уже о странной ошибке, которая также может появиться здесь.
Это, конечно, возможно. –
Не могли бы вы привести пример, где произошла ошибка. Прямо сейчас код, который вы нам представляете, не компилируется по разным причинам. – 0x499602D2
@ 0x499602D2 разместил ярлык определения класса – iksemyonov