Позвольте мне сформулировать вопрос более четко.
У меня есть объект Datarow:
Class Datarow {
private:
vector<string> vals;
public:
std::string getVal(int index); //returns vals.at(index)
};
У меня есть объект Section, который содержит строки данных:
Class Section {
private:
vector<Datarow> rows;
public:
//Section methods
};
И у меня есть перегруженный:
inline friend std::ostream& Section::operator<<(std::ostream& os, const Section& sec)
{
for(auto& row : sec.rows) {
if( sec.row.getVal(0) == "Tom" ) //<-- error here, c++ doesnt like me calling any method of
os << row << endl; // "row", since sec is const
}
}
Предположим, мы также перегрузили оператор << для Datarow. Одним из решений может быть отказ от использования auto &, но копирование «строки» каждый раз может оказаться дорогостоящим, если у меня много строк. Я не смог пройти const Section sec &, но это тоже может быть дорого. Есть ли элегантное решение этой проблемы? </p>