假設我需要實現工廠函數,它返回繼承/成員繼承自boost :: noncopyable的對象O.具有boost :: noncopyable的C++工廠函數
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 :: mutex結婚) – Anycorn 2010-07-02 06:58:55
@aaa:當然,我想這隻取決於情況。 – 2010-07-02 07:00:38