typeid speichern



  • hallo,

    ist es möglich, die typeid() eines Objektes zu speichern?
    ungefähr so: type_info ti = typeid(int)



  • laut msdn hat type_info einen name member. der einen const char* zurückgibt.

    (http://msdn.microsoft.com/en-us/library/70ky2y6k(VS.80).aspx)

    der darin enthaltene string kann natürlich gespeichet werden.

    google hilft 🙂


  • Administrator

    @Fencer,
    Nur wird dir der Name nichst bringen, da er nicht eindeutig sein muss. Der Name soll nur lesbar sein, das ist alles was der Standard vorschreibt.

    @daersc,
    Der Typ std::type_info kann man nicht kopieren. Das zurückgegeben Objekt von typeid ist allerdings während des ganzen Programmes gültig. Daher kannst du dir einen Zeiger darauf speichern und weitergeben:

    std::type_info const* typeInfo = &typeid(int);
    

    Um dir das Leben zu vereinfachen, kannst du einen Wrapper für sowas bauen:

    class TypeInfo
    {
      // Attributes //
    private:
      std::type_info const* m_type;
    
      // Constructors //
    public:
      TypeInfo()
        : m_type(0)
      {
      }
    
      TypeInfo(std::type_info const& type)
        : m_type(&type)
      {
      }
    
      // Methods //
    public:
      char const* name() const
      {
        assert(m_type);
        return m_type->name();
      }
    
      bool before(TypeInfo const& typeInfo) const
      {
        assert(m_type);
        return m_type->before(typeInfo.m_type);
      }
    
      friend bool operator ==(TypeInfo const& lhs, TypeInfo const& rhs)
      {
        return (*lhs.m_type) == (*rhs.m_type);
      }
    
      // usw.
    };
    
    // Verwendung, z.B:
    TypeInfo intType = typeid(int);
    TypeInfo copyType = intType; // möglich
    

    Grüssli



  • ok, ich hatte das speichern missverstanden (datei). 😉

    ich sollte mich mal an einen spruch halten den ich gerne schreibe: "Wer lesen kann ist klar im Vorteil" 😉



  • Dravere schrieb:

    Um dir das Leben zu vereinfachen, kannst du einen Wrapper für sowas bauen:

    Oder einfach Loki::TypeInfo nehmen.


Anmelden zum Antworten