Legacy код и лень.
От: kvasya  
Дата: 21.05.10 12:01
Оценка:
Есть структуры 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 );

Но сам факт наличия макроса, потенциальная опасность огрести с ним проблем. Учитывая, что сценарии использования до сих пор неизвестны.

Запланировал прикрутить пре-парсер с генерацией нормальных классов. Но опасаюсь, что парсер может стать самостоятельной задачей.
А руками делать обертки для каждой из структур (а их много) — лень.

В метапрограммировании особо не силен (Александреску изучал, но напрягаясь не слабо), с надеждой смотрю в эту сторону.. Что-нибудь посоветуете опытные коллеги?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.