我有多个类与的boost ::工厂创建的boost :: enable_shared_from_this类
class A : public boost::enable_shared_from_this<A> {
public:
typedef boost::shared_ptr<A> pointer;
static pointer create(tcp::socket& socket) {
return pointer(new A(socket));
}
private:
A(&tcp::socket socket) : m_socket(socket) {}
tcp::socket& m_socket;
}
Class Aa : public A {
public:
typedef boost::shared_ptr<Aa> pointer;
static pointer create(tcp::socket& socket) {
return pointer(new Aa(socket));
}
private:
Aa(&tcp::socket socket) : A(socket) {}
}
Class Ab : public A {
public:
typedef boost::shared_ptr<Ab> pointer;
static pointer create(tcp::socket& socket) {
return pointer(new Ab(socket));
}
private:
Ab(&tcp::socket socket) : A(socket) {}
}
推导[...]
Class Ax : public A {
public:
typedef boost::shared_ptr<Ax> pointer;
static pointer create(tcp::socket& socket) {
return pointer(new Ax(socket));
}
private:
Ax(&tcp::socket socket) : A(socket) {}
}
我想创建一个使用升压工厂模式: :工厂 我已经创作的类似的东西:
class MyFactory {
public:
static MyFactory* getInstance();
typedef boost::function< A(tcp::socket) > a_fact;
private:
MyFactory() {
map["Aa"] = boost::bind(boost::factory<Aa::create>, _1);
map["Ab"] = boost::bind(boost::factory<Ab::create>, _1);
[…]
map["Ax"] = boost::bind(boost::factory<Ax::create>, _1);
}
std::map<std::string, a_fact> map;
};
当然,它不COM pil ... 给我错误:
MyFactory.cc:13: error: type/value mismatch at argument 1 in template parameter list for ‘template<class Pointer, class Allocator, boost::factory_alloc_propagation AP> class boost::factory’
MyFactory.cc:13: error: expected a type, got ‘Aa::create’
任何想法,我应该如何实现它?
这将不起作用,因为我应该调用静态创建方法,而不是构造函数... – TheSquad 2011-05-13 13:28:17