2012-04-20 4 views
2

Мне нужно сохранить тип объекта в классе.
Это будет выглядеть так:Хранить информацию о типе объекта

template<class T> 
class box 
{ 
private: 

    type_info type; 
    T data; 
} 

Причина, почему я должен хранить информацию о типе сложна, чтобы объяснить, во всяком случае, я бы знать, если это possibile в C++.
Когда я пытаюсь составить инструкцию, как:

type=typeid(data); 

Я получаю ошибку синтаксиса:
Нет соответствия для инициализации «станд :: type_info»
Так что похоже type_info не имеет конструктор с нет аргументов. Возможно ли каким-то образом запомнить тип объекта в данных?

ответ

7

TypeInfo является noncopyable - его конструкторы и оператор присваивания являются частными (в C++ 11, они помечаются удалены). вы, вероятно, после того, как что-то вдоль этих линий:

template<class T> 
class box 
{ 
public: 
    box() : data(), type(typeid(data)) 
    { 
    } 
private: 
    T data; 
    const type_info& type; 
}; 
2

Вы можете взять указатель от объекта, возвращаемого выражением TypeID:

const std::type_info* const type = &typeid(data); 
0

Можно взять имя класса/объекта и сохранить его:

std::string name = typeid(data).name();

+0

В некоторых системах TypeId (х) .name() - это «b» для bools, «d» для парных, «Ss» для std :: strings, «h» для неподписанных целых чисел и т. д. Поэтому вам придется немного расшифровать этот вывод. – 01100110

Смежные вопросы