Использование шаблонов 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;
}

Ответы на вопрос(2)

Ваш ответ на вопрос