Ошибка компиляции Boost Factory

Пытаясь реализовать абстрактную фабрику с Boost Factory, классы иерархии имеют параметры c-tor, уже выглядело это обсуждение: Передача аргументов в конструктор с помощью 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 ожидает неконстантную ссылку, но я передаю rvalue, на который нельзя ссылаться. Конечно, после изменения параметров конструктора derived1 для ссылок все компилируется, но это будет выглядеть уродливо. Как правильно использовать этот шаблон?

Более абстрактный вопрос — стоит ли использовать Boost Factory с C ++ 14? Реализации кажутся немного устаревшими, я ожидал чего-то вариативного

Компилятор C ++ Visual Studio 2015

Boost 1.61

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …