gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:55:06 24 4
gpt4 key购买 nike

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

struct O : boost::noncopyable {};
O factory() { return O(); }

显然返回值无法编译。

你知道或使用什么方法来实现这样的工厂方法?如果可能的话,我真的很想避免重写复制构造函数,并返回值而不是引用或指针。

经过一些修改和来自 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);
}

最佳答案

如果是不可复制的,那么你必须返回一个指针或引用。这就是不可复制的意义所在。

如果您的类是不可复制的,那么您可能需要更改设计,因为您显然需要复制它。如果您有无法更改的不可复制成员,那么也许您的类可以保存指向不可复制对象的指针?

关于带有 boost::noncopyable 的 C++ 工厂函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com