我需要在一个类中存储一个对象的类型 这看起来像是:
template<class T>
class box
{
private:
type_info type;
T data;
}
我需要存储类型信息的原因很难解释,无论如何我都知道这是否可能在C ++中存在。
当我尝试编译像:
type=typeid(data);
我收到语法错误:
没有匹配&#39; std :: type_info&#39;的初始化
所以似乎type_info没有没有参数的构造函数。那么以某种方式可以将对象的类型记忆成数据吗?
答案 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();