关于addons的讨论
在编写扩展的C++类时候,发现要导出的函数必须是静态的,不然FunctionTemplate::New(Connect)->GetFunction()会报错。静态就静态,接着说,在静态方法(Connect)里面使用我定义的另外一个类。例如我定义成员变量SqlConn m_conn;这时候在Connect静态函数调用m_conn.connect()这当然不行,应该静态函数不需要调用非静态的函数。我这时候把m_conn定义为静态的。这时候就有问题了。每当我new一个新的对象,m_conn连接都会被重新赋值。也就是只能存在一个连接。请问大家有什么好的办法吗?
2 回复
为什么将m_conn定义为静态来保持对m_conn的引用?new一个新对象然后交给nodejs来管理,通过Unwrap重新获得此对象的引用。
Handle<Value> Connect(const Arguments& args) {
HandleScope scope;
SqlConn *conn = new SqlConn();
conn->Wrap(args.This());
return args.This();
}
后续的操作例如
Handle<Value> Query(const Arguments& args) {
HandleScope scope;
//...........
SqlConn* conn = ObjectWrap::Unwrap<SqlConn>(args.This());
//..........
}
SqlConn继承ObjectWrap,或者新建ObjectWrap的子类作为SqlConn的容器
这种方法不太好,应该类不能通用。