指向派生类的基类指针的C ++ typeid返回基类的typeid

时间:2016-06-29 18:22:40

标签: c++ inheritance polymorphism typeid

我有一个名为Parameter的基础虚拟类,它有几个模板化派生类,如TypedParameter。 现在我有一个函数接受一个参数*,它需要查找指针的确切类型。

void Serializer::Serialize(cereal::BinaryOutputArchive& ar, Parameter* param)
{
    auto itr = _binary_serializers.find(Loki::TypeInfo(typeid(*param)));
    ar(cereal::make_nvp("type", std::string(typeid(*param).name())));
    if(itr != _binary_serializers.end())
    {
        itr->second.second(ar, param);
    }
}

我从我的单元测试代码中调用了以下内容:

TypedParameter<int> test;
test.UpdateData(5);
{
    std::ofstream ofs("test.xml");
    cereal::XMLOutputArchive ar(ofs);
    Parameters::Cereal::Serializer::instance()->Serialize(ar, &test);
}

在调试器中,我可以看到指针指向正确的派生类型,并且它在调试器中显示了所有正确的派生类型信息,但是typeid(* param).name()总是返回“类参数: :参数”

我在Windows 7上使用visual studio 2013x64。为什么typeid无法获取正确的类型信息?

为了在不解析整个项目的情况下更容易理解,TypedParameter是一个具有以下继承的具体类:

参数 - &gt; ITypedParameter&LT; T> - &GT; MetaParameter&LT; T> - &GT; TypedParameter&LT; T&gt;

0 个答案:

没有答案