Domanda

Ho due DLL che sia dichiarare un tipo su modelli, Chiamiamo A. Se la dichiarazione di A è sufficientemente intricato, accade che il risultato di typeid (A) .name () è diverso quando chiama nelle funzioni in due diversi di dll.

Esempio:

DLL1:

struct MyType: public A< TEMPLATE_LIST_OF_A >{}

void f(){
std::string name1 = typeid(A).name();
}

DLL2:

struct MyType: public A< TEMPLATE_LIST_OF_A >{}
    void f(){
    std::string name2 = typeid(A).name();
    }

per esempio nome1 potrebbe essere qualcosa del tipo: "??? MyType ??? etc" mentre nome2 potrebbe essere "??? A ?? TEMPLATE_LIST_OF_A etc".

Il che rende effettivamente molto senso per me, ma è c'è un modo, a condizione che il nomi utilizzati sono la samem a garanzia che nome1 nome2 ==?

Grazie, rob

È stato utile?

Soluzione

Non solo non c'è alcun modo per garantire che typeid().name() è lo stesso in diverse DLL, le marche standard, quasi non ci sono garanzie circa la stringa restituita a tutti. Specificamente, non è garantito per essere a) significativa, b) unico per i diversi tipi, c) lo stesso per tipi identici.

In qualità di Attuazione problema, probabilmente si può supporre che queste tre condizioni tengono, ma soprattutto per i tipi di modello complicate io non sarei sorpreso se si poteva trovare casi in cui essi sono stati violati in una specifica compilatore.

Le parti rilevanti della norma 98 sono 5.2.8 e 18.5.1

Altri suggerimenti

No, in realtà vi sono diversi tipi (a mio parere).

Anche typeid (). Nome () è specifica del compilatore.

Se le due DLL sono compilati con esattamente lo stesso sistema operativo, compilatore e le opzioni del compilatore sembra probabile che le typeids sarebbero gli stessi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top