如何从C 中的类方法正确返回std :: Type_info



我有一个类模板,应该能够通过 std::type_info返回其模板类型:

template <class factType>
class Belief : public BeliefRoot
{
    /* ... */
    factType m_Fact;
    std::type_info GetBeliefType() const override
    {
        return typeid(m_Fact);
    }
};

但是编译该类给我以下错误:

错误c2280:'type_info :: type_info(const type_info&amp;)':尝试引用删除函数

有什么想法我在这里缺少什么?

问题与模板无关,这是因为type_info是不可复制的。您需要的每个type_info对象都已编译到您的程序中,并且typeid()不会制作新对象,它将返回对现有的const引用。

您应该通过const参考:

使GetBeliefType函数返回
const std::type_info& GetBeliefType() const override

如果您查看此文档,您会发现

type_info类既不是CopyConstruct也是...

因此,您无法返回其副本。错误消息告诉您同一件事,因为type_info::type_info(const type_info &)确实是您尝试使用的不存在复制构造函数。

解决方案:您可以返回参考。这是因为

TypeID表达式是LVALUE表达式,它是指具有静态存储持续时间的对象,即多态类型const std :: type_info或某种从其得出的类型的对象。

最新更新