Использование шаблонов C ++ с структурами C для самоанализа?
Я делаю некоторую работу на C ++ для компании, у которой все остальное написано на C (использование C не является для меня опцией :(). У них есть ряд структур данных, которые ОЧЕНЬ похожи (то есть все они имеют поля такие как «имя», «адрес» и т. д. Но по какой-то причине не существует «общей структуры», из которой они основывали все остальное (делает что-то адское). В любом случае, мне нужно сделать систему широкий анализ этих структур, находящихся в памяти, и через все это в таблицу. Не так уж плохо, но таблица должна включать записи для всех полей всех переменных, даже если они не имеют поля (struct b может иметь поле «latency», но struct a not 't - в таблице запись для каждого экземпляра a должна иметь пустую запись для «latency».
Итак, мой вопрос: есть ли способ определить во время выполнения, имеет ли структура, переданная в функцию шаблона, определенное поле? Или мне придется написать какой-нибудь черный магический макрос, который сделает это для меня? (Проблема в том, что я не могу использовать специализацию шаблонов)
Спасибо! Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь спрашивать!
Вот фрагмент того, о чем я думал ...
struct A
{
char name[256];
int index;
float percision;
};
struct B
{
int index;
char name[256];
int latency;
};
/* More annoying similar structs... note that all of the above are defined in files that were compiled as C - not C++ */
struct Entry
{
char name[256];
int index;
float percision;
int latency;
/* more fields that are specific to only 1 or more structure */
};
template<typename T> struct Entry gatherFrom( T *ptr )
{
Entry entry;
strcpy( entry.name, ptr->name, strlen( ptr->name ) );
entry.index = ptr->index;
/* Something like this perhaps? */
entry.percision = type_contains_field( "percision" ) ? ptr->percision : -1;
}
int main()
{
struct A a;
struct B b;
/* initialization.. */
Entry e = gatherFrom( a );
Entry e2 = gatherFrom ( b );
return 0;
}