Persistir informações do tipo C ++ no arquivo para uso nas chamadas de programa

Editar: destacando a pergunta real com mais contexto disponível, se desejado.

Eu quero implementar o seguinte método:

template <typename T>
<unspecified> type_identification();

Para um tipo T genérico, ele deve retornar uma identificação (relativamente) exclusiva que seja estável em várias invocações do mesmo programa e possa ser usada para comunicação entre processos (portanto, não há soluções baseadas em ponteiro).

Macros / extensões / intrínsecas específicas do compilador podem ser usadas, preferencialmente disponíveis para MSVC e clang.

Eu considereistd::type_info::hash_codeoustd::type_info::name mas ambos não podem garantir a mesma saída em várias invocações do mesmo programa.

Tentando evitar oProblema XY explicando imediatamente o problema que estou tentando resolver.

Eu escrevi um código para armazenar dados genericamente em arquivo para uso posterior. Cada entrada denominada no arquivo recebe um rótulo pelo código do aplicativo que deve ser usado para acessar a mesma entrada em uma chamada de programa posterior. A API basicamente se resume a:

template <typename T>
void make(const std::string &name, T value);

template <typename T>
T get(const std::string &name);

Observe que este é apenas um exemplo de código.

Quando o código do aplicativo acessa um valor por meio deget<T>, especifica explicitamente o tipo de entrada para que a implementação possa usarreinterpret_cast para dar acesso à entrada como o tipo real em vez de como umvoid *.

Vamos supor, para o bem desta pergunta, que todos os perigos e armadilhas relacionados areinterpret_cast e dados persistentes para arquivar foram levados em consideração.

Para evitar falhas sérias porque o código do aplicativo alterou o argumento do modelo, gostaria de adicionar uma identificação de tipo a cada entrada no arquivo. Basicamente, quando o código do aplicativo faz algo como:

make("integer", 5);
auto a = get<std::string>("integer");

Gostaria de lançar uma exceção indicando a incompatibilidade entre o tipo real e o tipo solicitado.

questionAnswers(1)

yourAnswerToTheQuestion