试图用 Boost Factory 实现抽象工厂,层次结构的类有 c-tor 参数,已经看过这个讨论:Passing arguments in constructor with boost factory
我的例子如下:
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 出于某些原因期望非常量引用,但我传递了无法引用的右值。当然,在将构造函数参数更改derived1
为引用后,一切都会编译,但看起来很难看。这种模式的正确用法是什么?
更抽象的问题 - 将 Boost Factory 与 C++14 一起使用是否值得?实现似乎有点过时了,我期待一些基于可变参数的东西
C++ 编译器 Visual Studio 2015
提升 1.61