我有一个包含初始值的JSON和创建对象的管理器。这些值被读取为字符串,但管理器需要类型名称来创建对象。
我的代码大致如下:
for(auto obj_str : json["objs"])
{
if(obj_str == "ObjectFoo")
{
manager.createObject<ObjectFoo>();
}
if(obj_str == "ObjectBar")
{
manager.createObject<ObjectBar>();
}
if(obj_str == "ObjectBaz")
{
manager.createObject<ObjectBaz>();
}
}
有没有一种方式可以避免为每个对象使用if语句,并使用一个或多个通用函数? 对象的字符串始终与类型名称相同。
std::map<std::string,/*成员函数指针*/>
。 - François Andrieuxtypeinfo
和一些模板技巧可能可以实现它。如果没有其他人比我先回答,那么我稍后会发布一个答案。 - Silvio Mayolotypeinfo
将类型转换为字符串。但是如果要实现相反的转换,则需要构建某种映射字符串和类型之间关系的表格。if-else 链是这种表格的一种形式,虽然不是最简洁的形式,但手动枚举所有类型是无法避免的。 - n. m.