Usando modelos C ++ com estruturas C para introspecção?

Eu estou fazendo algum trabalho em C ++ para uma empresa que tem tudo escrito em C (usando C não é uma opção para mim :(). Eles têm um número de estruturas de dados que são muito semelhantes (ou seja, todos eles têm campos como "nome", "endereço", etc. Mas, por alguma razão, não há uma estrutura comum que eles usaram para basear todo o resto (faz qualquer coisa ser um inferno). análise dessas estruturas que estão na memória, e através de tudo em uma tabela.Não muito ruim, mas a tabela tem que incluir entradas para todos os campos de todas as variáveis, mesmo que eles não tenham o campo (struct b may tem campo "latência", mas struct a não - na tabela, a entrada para cada instância de um deve ter uma entrada vazia para "latência".

Então, minha pergunta é, existe uma maneira de determinar em tempo de execução se uma estrutura que foi passada para uma função de modelo tem um campo específico? Ou vou ter que escrever alguma macro de magia negra que faz isso para mim? (O problema é basicamente que não posso usar a especialização de modelo)

Obrigado! Se você tiver alguma dúvida não hesite em perguntar!

Aqui está um trecho do que eu estava pensando ...

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