Boost Factory编译错误

时间:2017-01-26 08:07:32

标签: c++ boost-bind boost-functional

试图用Boost Factory实现抽象工厂,层次结构的类有c-tor参数,已经看过这个讨论:https://stackoverflow.com/a/12855533/1436617

我的例子如下:

struct base {
    virtual ~base() = default;
    virtual void method() = 0;
};

struct derived1 : public base {
    derived1(int a1, int a2) {}
    virtual ~derived1() = default;
    virtual void method() {}
};

创建工厂并尝试创建实例

std::map<uint8_t, boost::function<base*(int, int)>> my_factory;
my_factory[0] = boost::bind(boost::factory<derived1*>(), _1, _2) ;
std::unique_ptr<base> derived_instance(my_factory.at(0)(1, 2));

根据boost :: bind cannot convert argument 1 from 'int' to 'int &'

中的错误,它根本无法编译

我理解错误的本质,boost :: bind期望非const引用由于某些原因,但是我传递了无法引用的rvalue。当然,在将构造函数params derived1更改为引用后,所有内容都会编译,但它看起来很难看。这种模式的正确用法是什么?

更抽象的问题 - 是否值得使用Boost Factory和C ++ 14?实现似乎有点过时,我期待一些基于变量的

C ++编译器Visual Studio 2015

提升1.61

0 个答案:

没有答案