Как преобразовать структуру к другому типу?
Есть си библиотека, в нем есть структура typedef struct {} CStruct;. Хочу иметь возможность преобразовывать его к другому типу не меняя исходники. Как это можно сделать?
UDP: Упаковать в другую структуру не всегда удобно + нужно много доп кода писать, вместо одной функции. Можно ли сделать лучше?
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
// си структура, которую не трогаем
typedef struct {
int a;
double b;
} CStruct;
struct CppStruct {
CStruct& d;
CppStruct(CStruct& s) : d(s) {}
operator CStruct() const {
return d;
}
operator std::string() const {
std::stringstream s;
s << "(" << std::to_string(d.a) << ", " << std::to_string(d.b) << ")";
return s.str();
}
};
void someFunc(CStruct c) {
cout << __PRETTY_FUNCTION__ << endl;
}
int main()
{
CStruct t {2, 3.14};
CppStruct tCpp(t);
string s0 = CppStruct(t); // не удобно
string s1 = tCpp; // удобно
cout << s0 << endl << s1 << endl;
cout << t.a << endl; // удобен
cout << tCpp.d.a << endl; // не удобно
someFunc(t); // удобно
someFunc(tCpp); // удобно
return 0;
}