我包装了一个 C++ 标准库std::map<T1,T2>
,我想将它作为 Node.JS 插件公开。我想要两个函数,Set
用于向哈希表添加新值,以及Get
从地图中查找值。我想要一个适用于“任意”类型的函数。这意味着Get
必须从中提取类型T1
的值Args[0]
(注意Args
是 type v8::Arguments
)。请参阅下面的代码。
template<typename T1, typename T2>
class Hash : public node::ObjectWrap {
public:
static v8::Persistent<v8::FunctionTemplate> constructor;
static void Init(v8::Handle<v8::Object> target);
protected:
/* ... */
static v8::Handle<v8::Value> New(const v8::Arguments& Args); // new object
static v8::Handle<v8::Value> Set(const v8::Arguments& Args); // set H[x]=y
static v8::Handle<v8::Value> Get(const v8::Arguments& Args); // return H[x]
private:
std::map<T1, T2> H;
};
/* ... */
template<typename T1, typename T2>
v8::Handle<v8::Value> Hash<T1, T2>::Get(const v8::Arguments& Args) {
v8::HandleScope HandleScope;
THash<T1, T2>* H = ObjectWrap::Unwrap<Hash<T1, T2> >(Args.This());
// TODO: I want to extract argument Args[0] of type T1, call it x, and then
// return argument y=H->get(x) of type T2.
return v8::Undefined();
}
有没有办法做到这一点?如果是,这样做的方法是什么?
如果无法提取任意类型,如果我愿意限制为几种预定义类型,最佳实践是什么?例如,T=int
、T=std::string
、T=MyType1
和T=MyType2
。