提问者:小点点

如何使用基类作为C++中派生类的占位符?


我正在循环一些代码来填充一些对象。我花了很长时间试图简化这个循环,但我仍然坚持使用基类作为派生类的占位符。我觉得这应该是可能的,但我不能使它起作用。

我正在运行一个映射,寻找值中的特定字符串。如果我找到一个这样的字符串,我将它拆下并将它包含的数据存储在一个对象中。根据字符串的不同,我需要存储在不同子类(可能是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);
    }
}

共1个答案

匿名用户

自然的做法是取代:

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也可能有一种方法。

最适合您的可能是基于意见的,并且无论如何都需要看到更多的代码。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(基|类|c++|中|派生类|占位|符)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?