Предположим, мне нужно реализовать фабричную функцию, которая возвращает объект O, который наследует / имеет членов, унаследованных от boost :: noncopyable.
struct O : boost::noncopyable {};
O factory() { return O(); }
Очевидно, возвращаемое значение не компилируется.
Какой методВы знаете или используете для реализации таких заводских методов?Мне действительно нравится избегать переопределения конструктора копирования, если это возможно, и возвращать значение, а не ссылку или указатель.
после некоторой обработки и ссылки с кодеки, я справился с этим (не знаю, как это делает переносимый, кажется, работает сг ++):
template<class E>
struct threads_parallel_for_generator
: for_generator<E, threads_parallel_for_generator<E> > {
typedef for_generator<E, threads_parallel_for_generator> base_type;
struct factory_constructor {
explicit factory_constructor(const E &expression)
: expression_(expression) {}
operator const E&() const { return expression_; }
private:
E expression_;
};
threads_parallel_for_generator(const factory_constructor & constructor)
: base_type(constructor, *this) {}
private:
boost::mutex mutex_;
};
template<class E>
static threads_parallel_for_generator<E>
parallel_for(const E &expression) {
typedef threads_parallel_for_generator<E> generator;
return typename generator::factory_constructor(expression);
}