Есть структуры C вида:
struct A
{
char a;
char b[10];
// еще полсотни char-ов
}
..
char * data = ..
A someData;
memcpy( &someData, data, sizeof(d) );
Какой бы финт ушами придумать, чтобы char превратить в string?
Условие одно: нельзя трогать legacy код;
Цель одна: получить IntelliSense и безопасные строковые данные:
Console::Write( /* const string & */ someData.b );
Пока выкрутился примерно таким кривым макросом:
#define CopySomeMember(member,out_string) { out_string.assign( (char *)&(member), sizeof( (member) ) ); }
...
std::string outData;
CopySomeMember( someData.b, outData );
Но сам факт наличия макроса, потенциальная опасность огрести с ним проблем. Учитывая, что сценарии использования до сих пор неизвестны.
Запланировал прикрутить пре-парсер с генерацией нормальных классов. Но опасаюсь, что парсер может стать самостоятельной задачей.
А руками делать обертки для каждой из структур (а их много) — лень.
В метапрограммировании особо не силен (Александреску изучал, но напрягаясь не слабо), с надеждой смотрю в эту сторону.. Что-нибудь посоветуете опытные коллеги?