Persist C ++ escriba información para archivar para su uso en las invocaciones de program

Editar resaltando la pregunta real con más contexto disponible si lo desea.

Quiero implementar el siguiente método:

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

Para un tipo T genérico, debe devolver una identificación (relativamente) única que sea estable a través de múltiples invocaciones del mismo programa y pueda usarse para la comunicación entre procesos (por lo que no hay soluciones basadas en punteros).

Se pueden usar macros / extensiones / intrínsecos específicos del compilador, preferiblemente disponibles tanto para MSVC como para clang.

He consideradostd::type_info::hash_code ostd::type_info::name pero ambos no pueden garantizar el mismo resultado en múltiples invocaciones del mismo programa.

Intentando evitar el XY-problem explicando de inmediato el problema que estoy tratando de resolver.

He escrito un código para almacenar genéricamente los datos en el archivo para su uso posterior. A cada llamada entrada en el archivo se le asigna una etiqueta por el código de la aplicación que debe usar para acceder a la misma entrada en una invocación posterior del programa. La API básicamente se reduce a:

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

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

Observe que esto es simplemente un código de ejemplo.

Cuando el código de la aplicación accede a un valor a través deget<T>, especifica explícitamente el tipo de entrada para que la implementación pueda usarreinterpret_cast para dar acceso a la entrada como el tipo real en lugar de como unavoid *.

Supongamos, por el bien de esta pregunta, que todos los peligros y peligros relacionados conreinterpret_cast y los datos persistentes para archivar se han tenido en cuenta.

Para evitar bloqueos desagradables porque el código de la aplicación ha desordenado el argumento de la plantilla, me gustaría agregar alguna identificación de tipo a cada entrada en el archivo. Básicamente, cuando el código de la aplicación hace algo como:

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

Me gustaría lanzar una excepción que indique la falta de coincidencia en el tipo real y el tipo solicitado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta