0
我寫Agueas [1]爲插件Node.js的傳遞對象到由C回調函數++代碼
現在我已經同步碼,C++類如下所示:
class LibAugeas : public node::ObjectWrap {
public:
static void Init(Handle<Object> target);
protected:
augeas * m_aug;
LibAugeas();
~LibAugeas();
static Handle<Value> New(const Arguments& args);
static Handle<Value> get (const Arguments& args);
static Handle<Value> set (const Arguments& args);
static Handle<Value> setm (const Arguments& args);
// other methods
};
的用法這個類在JS:
var lib = require('...');
var aug = new lib.Augeas(...);
aug.set(...);
aug.get(...);
// etc
我要推動異步代碼。
瓶頸是創建augeas對象(aug_init),而所有或一些鏡頭和文件正在加載和解析。這樣的想法是創建augeas異步對象,然後通過創建JS對象的回調函數:
- 用純C線:調用aug_init(),aug_load()得到augeas處理。
- 準備好後,使用augeas句柄來創建JS對象(請參閱第一個片段)
- 將創建的JS對象傳遞給回調函數。
用法可能是這樣:
lib.heracles(function(aug) {
if (!aug.error()) {
console.log('Hello!');
// async save:
aug.save(function(err, msg) {
console.log(msg);
});
} else {
console.log('Sad, but true :-(');
}
}
);
最後,我的問題:我不知道如何在C++創建JS對象:-)
構造static Handle<Value> New(const Arguments& args);
回報args.This()
,但是當我在C++代碼中時,我沒有args
,也無法包裝對象。
那麼,如何在C++中創建JS對象?請不要傷我的心臟說:-)
更新:對象tenplate可能會創建一次,也可能會重用FunctionTemplate。 – Igor 2012-04-25 11:25:46