使用Boost Factory在构造函数中传递参数

用户名

我对整个工厂的实施还很陌生,结果也许我的问题听起来很错误,而且定义不明确。因此,我想简单地说一下,以便初始化派生类的分支,到目前为止,我已经设法对具有空构造函数的类进行了初始化。让我以两个小类介绍当前的boost工厂实现:

Base.h:

#ifndef BASE_H_
#define BASE_H_

#include <vector>
#include <map>
#include "boost/function.hpp"

class base {

protected:
    typedef boost::function <base *()> basefactory;

public:
      base();
      virtual ~base();

     int a;

     static std::map<std::string,base::basefactory>& b_factory();

  };

#endif /* BASE_H_ */

Base.cpp:

#include "base.h"

base::base() {
   // TODO Auto-generated constructor stub
}

base::~base() {
  // TODO Auto-generated destructor stub
}

static std::map<std::string,base::basefactory>& base::b_factory()
{
  static std::map<std::string,base::basefactory>* ans =
  new std::map<std::string,base::basefactory>();
  return *ans;
}

Derived.h:

#ifndef DERIVED_H_
#define DERIVED_H_

#include "boost/function.hpp"
#include "boost/functional/factory.hpp"
#include <iostream>

#include "base.h"

class derived : public base {
     public:
         derived();
         virtual ~derived();

          int b;

          static class _init {
            public:
               _init() {
                       base::b_factory()["derived"] = boost::factory<derived*>();
                       }
           }_initializer;

 };

 #endif /* DERIVED_H_ */

Derived.cpp:

#include "derived.h"

derived::derived() {
    // TODO Auto-generated constructor stub
}

derived::~derived() {
    // TODO Auto-generated destructor stub
}

derived::_init derived::_initializer;

因此,上面显示的代码对于类的空构造函数很好用,但是我不确定如何在基类和派生类构造函数需要接收参数的情况下修改代码。更具体地说,假设我想拥有基本构造函数:

base(int alpha) { 
a = alpha;
}

以及派生的构造函数:

derived(int alpha, int beta) : base( alpha ) // in order to pass the argument alpha to the base class
{ 
    b = beta;
}

因此,如上所述,我真的不确定要进行哪些修改才能使上述boost工厂实现适用于我的代码。我知道在网上的其他地方有一些关于参数化构造函数的文章,但是他们并没有使我自己正确地理解如何做,这就是为什么我把这个文章归她。任何形式的帮助/建议将不胜感激!

贾罗德42

如果您想要一个带有2个参数的工厂,则可以执行以下操作:

std::map<std::string, boost::function<base* (int, int)>> factories;
factories["derived"] = boost::bind(boost::factory<derived*>(), _1, _2);

std::unique_ptr<base> b{factories.at("derived")(42, 52)};

如果您想修正参数,可以这样做

std::map<std::string, boost::function<base* ()>> factories;
factories["derived"] = boost::bind(boost::factory<derived*>(), 42, 52);
std::unique_ptr<base> b{factories.at("derived")()};

演示版

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用new传递构造函数参数

来自分类Dev

使用构造函数传递带参数的方法

来自分类Dev

如何使用在Boost Fusion容器中实例化的类型的参数调用构造函数?

来自分类Dev

如何在构造函数中传递参数来保留注册的服务使用情况?

来自分类Dev

Boost :: Graph中的read_graphviz(),传递给构造函数

来自分类Dev

如何使用Light Inject将参数传递给构造函数?

来自分类Dev

何时使用构造函数以及何时传递参数

来自分类Dev

如何使用useState在函数中传递参数?

来自分类Dev

使用boost :: bind传递成员函数

来自分类Dev

C ++ Boost :: serialization在调用函数的参数中“无匹配函数可供调用”到类的构造函数

来自分类Dev

通过使用显式构造函数将相同的参数传递给每个元素来构造元组

来自分类Dev

使用boost :: hana获取函数参数的类型

来自分类Dev

构造函数使用参数调用构造函数

来自分类Dev

使用默认参数将特定参数传递给Boost Python函数

来自分类Dev

使用boost :: filesystem :: path作为参数的C ++构造函数调用-没有任何反应

来自分类Dev

使用Boost Python将具有数组参数的构造函数暴露给类

来自分类Dev

在函数内在R中传递参数,错误的未使用参数

来自分类Dev

自动从构造函数(Eclipse,Java)中删除未使用的参数

来自分类Dev

自动从构造函数(Eclipse,Java)中删除未使用的参数

来自分类Dev

在Dart中的可选参数构造函数中使用构造函数初始化成员

来自分类Dev

javascript使用函数在函数后的变量中传递参数

来自分类Dev

Java-试图使用在另一个类中传递给另一个构造函数的参数来初始化对象?

来自分类Dev

通过多个派生类传递类型参数以在通用静态构造函数中使用

来自分类Dev

python多继承使用super将参数传递给构造函数

来自分类Dev

使用Reflection类将确切数量的参数传递给类构造函数PHP

来自分类Dev

将参数传递给make时如何使用Laravel的自动构造函数注入?

来自分类Dev

使用作为参数传递的对象创建新对象的构造函数

来自分类Dev

使用setter而不是通过构造函数传递参数有什么意义?

来自分类Dev

使用初始化列表时检查传递给构造函数的参数-C ++

Related 相关文章

  1. 1

    如何使用new传递构造函数参数

  2. 2

    使用构造函数传递带参数的方法

  3. 3

    如何使用在Boost Fusion容器中实例化的类型的参数调用构造函数?

  4. 4

    如何在构造函数中传递参数来保留注册的服务使用情况?

  5. 5

    Boost :: Graph中的read_graphviz(),传递给构造函数

  6. 6

    如何使用Light Inject将参数传递给构造函数?

  7. 7

    何时使用构造函数以及何时传递参数

  8. 8

    如何使用useState在函数中传递参数?

  9. 9

    使用boost :: bind传递成员函数

  10. 10

    C ++ Boost :: serialization在调用函数的参数中“无匹配函数可供调用”到类的构造函数

  11. 11

    通过使用显式构造函数将相同的参数传递给每个元素来构造元组

  12. 12

    使用boost :: hana获取函数参数的类型

  13. 13

    构造函数使用参数调用构造函数

  14. 14

    使用默认参数将特定参数传递给Boost Python函数

  15. 15

    使用boost :: filesystem :: path作为参数的C ++构造函数调用-没有任何反应

  16. 16

    使用Boost Python将具有数组参数的构造函数暴露给类

  17. 17

    在函数内在R中传递参数,错误的未使用参数

  18. 18

    自动从构造函数(Eclipse,Java)中删除未使用的参数

  19. 19

    自动从构造函数(Eclipse,Java)中删除未使用的参数

  20. 20

    在Dart中的可选参数构造函数中使用构造函数初始化成员

  21. 21

    javascript使用函数在函数后的变量中传递参数

  22. 22

    Java-试图使用在另一个类中传递给另一个构造函数的参数来初始化对象?

  23. 23

    通过多个派生类传递类型参数以在通用静态构造函数中使用

  24. 24

    python多继承使用super将参数传递给构造函数

  25. 25

    使用Reflection类将确切数量的参数传递给类构造函数PHP

  26. 26

    将参数传递给make时如何使用Laravel的自动构造函数注入?

  27. 27

    使用作为参数传递的对象创建新对象的构造函数

  28. 28

    使用setter而不是通过构造函数传递参数有什么意义?

  29. 29

    使用初始化列表时检查传递给构造函数的参数-C ++

热门标签

归档