我正在循环一些代码来填充一些对象。我花了很长时间试图简化这个循环,但我仍然坚持使用基类作为派生类的占位符。我觉得这应该是可能的,但我不能使它起作用。
我正在运行一个映射,寻找值中的特定字符串。如果我找到一个这样的字符串,我将它拆下并将它包含的数据存储在一个对象中。根据字符串的不同,我需要存储在不同子类(可能是5-7个子类)中的信息。我觉得我可以在不损失可读性的情况下进一步缩短它,方法是使用父对象作为临时对象,并在for-loop中只定义它一次,但我不知道是如何实现的。如果我执行all_object_as.push_back(parent_object),则.push_back()函数将不起作用。
store_data()函数只在父类中定义。
std::vector<Derived_object_A> all_object_As;
std::vector<Derived_object_B> all_object_Bs;
for (auto element : some_map)
{
std::vector<string> data_buffer = separate_data(get_data(element.second));
if (element.second.find("SOMETEXT") != string::npos)
{
Derived_object_A object;
object.store_data(data_buffer);
all_object_As.push_back(object);
}
if (element.second.find("SOMEOTHERTEXT") != string::npos)
{
Derived_object_b object;
object.store_data(data_buffer);
all_object_Bs.push_back(object);
}
}
自然的做法是取代:
std::vector<Derived_object_A> all_object_As;
std::vector<Derived_object_B> all_object_Bs;
与
std::vector<Base_object&> all_objects;
但是不能有引用的vector
。因此,这就给您留下了各种方法:
std::vector<Base_object*> all_objects_ptr; // but then you need to manage ownership and lifetimes
std::vector<std::shared_ptr<Base_object>> all_objects_shared_ptr;
对于reference_wrapper
也可能有一种方法。
最适合您的可能是基于意见的,并且无论如何都需要看到更多的代码。