我有一个名为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;