【问题标题】:c++11 Create object instance iterated through vectorc++11通过vector迭代创建对象实例
【发布时间】:2016-03-18 23:09:09
【问题描述】:

我有一个带有“已注册”类的向量列表。

ma​​in.cpp

// main.cpp:
// from namespace::class3
bool successfulregistered = RegisterComponents(vector<CustomNamespace::class1,CustomNamespace::class2>);

class3.h

// in class3
    private:
        vector<CustomNamespace> Objectinstance;

    public:
        bool RegisterComponents(vector<CustomNamespace>& RegisterComponents);

class3.cpp

        // implementation
        bool class3::RegisterComponents(vector<CustomNamespace>& RegisterComponents)
        {
            for(int i = 0; i < RegisterComponents.end(); i++)
            {
                class3::Objectinstance->iterator(*RegisterComponents);
                // and then some checks
            }
        }

现在我喜欢收集对类的访问权限并创建对象实例来调用方法:

void class3::startserver(void)
{
    for(auto i = Objectinstance.begin(); i != Objectinstance.end(); i++)
    {
        /*  How can I create the objects from the vector list with
                their classes and call the specific constructor? */

        /* i == CustomNamespace::class1 */


    }
}

class1.h

ConfigWatchdog(string &SetJSONFile, const char &cJSONRoot);

class2.h

ServerNetworking(unit& setIPAddress, ...);

【问题讨论】:

  • 问题不清楚,代码看起来不像可编译的 C++(它混淆了迭代器和索引,使用 namespace 作为类型名称等)请澄清您的问题并收紧代码以提供帮助我们回答这个问题。

标签: c++ c++11 vector


【解决方案1】:

尽管您的代码给了我一个 WTF 时刻,但我想我可以提供帮助。循环中的i 是一个迭代器:

for(auto i = Objectinstance.begin(); i != Objectinstance.end(); i++)

您可以通过取消引用 i - *i 来访问元素。您可以复制构造另一个Namespace(将其设为大写Nnamespace 是关键字,你不知道吗?):

Namespace obj1 = *i;

也许只是grab a book

【讨论】:

  • 但是列表中有两个不同的类,我怎样才能有所作为?向量;因此,当我使用 i 进行迭代时,它在每个连续性中都有另一个类,我只想调用它。
  • std::vector 只能包含一种类型的元素...第二个模板参数是自定义分配器。 Read the reference.
  • 我对示例进行了一些编辑,以使其名称空间更加清晰。很抱歉造成混淆。 :) 那么std::vector&lt; mynamespace &gt;Listwithmycustomclasses 可能是一个包含一种元素类型的列表,或者不是?
  • 芜湖好的,知道了。但现在还不清楚我如何访问里面的每个类并用迭代器调用它。您能否编辑您的示例以使我清楚?
  • 您必须先编辑您的问题 - 我不知道 Namespace 类是什么样的。
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2012-09-04
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
相关资源
最近更新 更多