关于addons的讨论
发布于 2年前 作者 zhs077 708 次浏览

在编写扩展的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的容器

这种方法不太好,应该类不能通用。

回到顶部