Как преобразовать структуру к другому типу?

Есть си библиотека, в нем есть структура 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;
}

Ответы (0 шт):