2016-01-15 3 views
0

Скажем, определить пользовательский тип в моем с ++ кода для обработки векторов в 3D:Добавление метода ofstream для объекта определяется ЬурейиМ

typedef tuple<double,double,double> vector3d; 

Можно добавить метод к тому, чтобы я мог быстро выход их координаты с помощью:

vector3d somevector(1,1,1); 
cout << somevector << "\n"; 

Я знаю, что я мог сделать это обертывание этих объектов в class или struct но можно сделать это более прямолинейны?

ответ

2

Перегрузка streaming operator для ostream.

typedef tuple<double,double,double> vector3d; 

ostream& operator<<(ostream& os, const vector3d& vec) 
{ 
    os << '(' << 
      std::get<0>(vec) << ',' << 
      std::get<1>(vec) << ',' << 
      std::get<2>(vec) << ')'; 
    return os; 
} 

int main(int argc, char *argv[]) 
{ 
    cout << vector3d(1, 2, 3); 
    return 0; 
} 
+2

Следует отметить, что этот оператор будет вызываться для всех кортежей с 3 двойными в нем, игнорируя typedef – DennisS

Смежные вопросы