У меня есть два класса (это извлечение из моего более сложного случая)
class ClUInt {
public:
ClUInt() : _i(2), _arr{1,2,3} {};
ClUInt(const unsigned int ui) : _i(ui) {};
private:
unsigned int _i;
double _arr[3];
};
class ClInt {
public:
ClInt() : _i(-2), _arr{-1,-2,-3} {};
ClInt(const int i) : ClInt() { _i = i; };
private:
int _i;
double _arr[3];
};
Они очень похожи, но один использует int
, а другой unsigned int
для члена _i
.
Я хочу перегрузить operator<<
, например,
std::ostream& operator<<(std::ostream& os, const ClInt & ci)
{
cout << ci._i << endl;
cout << ci._arr[0] << endl;
return os;
}
Предположим, я хочу "одинаковую" перегрузку для обоих классов.
Как Могу ли я написать его только один раз, чтобы его было проще поддерживать? Я думал о том, чтобы определить свой собственный состав, но я не уверен, что это способ go ...
Примечания:
Я думаю У меня нет шансов заставить два класса разделить какую-либо часть дерева наследования.
Они могли бы на самом деле struct
с, поэтому, если конфиденциальность влияет на ответ, можно предположить, что _i
и _arr
равны public
.
В данном случае два struct
s имеют большее количество «общих» членов, которые подписаны / не подписаны, соответственно.