Używanie szablonów C ++ ze strukturami C do introspekcji?

Robię trochę pracy w C ++ dla firmy, która ma wszystko inne napisane w C (użycie C nie jest dla mnie opcją :(). Mają wiele struktur danych, które są BARDZO podobne (tzn. Wszystkie mają pola takie jak „imię”, „adres” itp. Ale z jakiegoś powodu nie istnieje wspólna struktura, na której opierałoby się wszystko inne (sprawia, że ​​robienie czegokolwiek jest piekło). analiza tych struktur, które znajdują się w pamięci, a przez to wszystko w tabeli.Nieźle, ale tabela musi zawierać wpisy dla wszystkich pól wszystkich zmiennych, nawet jeśli nie mają one pola (struct b może mają pole „latency”, ale struct a nie - w tabeli wpis dla każdej instancji musi mieć pusty wpis „latency”.

Tak więc moje pytanie brzmi: czy istnieje sposób określenia w czasie wykonywania, czy struktura przekazana do funkcji szablonu ma określone pole? A może będę musiał napisać jakieś czarne magiczne makro, które robi to dla mnie? (Problem polega zasadniczo na tym, że nie mogę użyć specjalizacji szablonów)

Dzięki! Jeśli masz jakiekolwiek pytania, nie wahaj się zapytać!

Oto fragment tego, co myślałem ...

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;
}

questionAnswers(3)

yourAnswerToTheQuestion