2

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

template<class T>
class box
{
private:

    type_info type;
    T data;
}

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

type=typeid(data);

我收到一个语法错误:
“std::type_info”的初始化没有匹配
所以看起来 type_info 没有没有参数的构造函数。那么有可能以某种方式将对象的类型记忆到数据中吗?

4

3 回答 3

7

typeinfo 是不可复制的——它的构造函数和赋值运算符是私有的(在 C++11 中它们被标记为已删除)。你可能会追求这些方面的东西:

template<class T>
class box
{
public:
    box() : data(), type(typeid(data))
    {
    }
private:
    T data;
    const type_info& type;
};
于 2012-04-20T12:18:02.677 回答
2

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

const std::type_info* const type = &typeid( data );
于 2012-04-20T12:17:45.840 回答
0

可以获取类/对象的名称并将其存储:

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

于 2012-04-20T12:21:11.337 回答