带有boost :: noncopyable的C++工厂函数

Any*_*orn 3 c++ boost factory

假设我需要实现工厂函数,它返回继承/具有继承自boost :: noncopyable的成员的对象O.

struct O : boost::noncopyable {};
O factory() { return O(); }
Run Code Online (Sandbox Code Playgroud)

显然返回值无法编译.

您知道或使用哪种方法来实施此类工厂方法?如果可能的话,我真的想避免重写复制构造函数并返回值而不是引用或指针.

经过一些修补和来自codeka的链接我管理了这个(不知道这有多便携,似乎与g ++一起工作):

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);
}
Run Code Online (Sandbox Code Playgroud)

Gar*_*ary 7

如果是不可复制的,则必须返回指针或引用.这是不可复制的要点.

如果您的类是不可复制的,那么您可能需要更改设计,因为您显然需要复制它.如果你有不可复制的成员,你无法改变,那么你的类可能会持有指向不可复制对象的指针?

  • 转移指针的所有权 - 这正在移动. (2认同)