存储有关对象类型的信息

时间:2012-04-20 12:08:43

标签: c++ rtti

我需要在一个类中存储一个对象的类型 这看起来像是:

template<class T>
class box
{
private:

    type_info type;
    T data;
}

我需要存储类型信息的原因很难解释,无论如何我都知道这是否可能在C ++中存在。
当我尝试编译像:

这样的指令时
type=typeid(data);

我收到语法错误:
没有匹配&#39; std :: type_info&#39;的初始化 所以似乎type_info没有没有参数的构造函数。那么以某种方式可以将对象的类型记忆成数据吗?

3 个答案:

答案 0 :(得分:7)

typeinfo是不可复制的 - 它的构造函数和赋值运算符是私有的(在C ++ 11中它们被标记为已删除)。你可能会按照以下方式做点什么:

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

答案 1 :(得分:2)

您可以从typeid表达式返回的对象中获取指针:

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

答案 2 :(得分:0)

可以取类/对象的名称并存储它:

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