C++ 模板类绑定到 nodejs
Posted
技术标签:
【中文标题】C++ 模板类绑定到 nodejs【英文标题】:C++ template class binding to nodejs 【发布时间】:2013-07-01 18:02:15 【问题描述】:我想创建 nodejs 插件包装 C++ 类模板。我将示例类从“Wrapping C++ objects”教程转换为模板。它编译没有错误,但我在使用它时出错。
node: symbol lookup error: /home/me/projects/node-template/build/Release/addon.node: undefined symbol: _ZN8MyObjectIdE4InitEN2v86HandleINS1_6ObjectEEE
插件.cc:
<...>
void InitAll(Handle<Object> exports)
MyObject<double>::Init(exports);
<...>
我的对象.cc:
<...>
template <typename T>
MyObject<T>::MyObject() ;
template <typename T>
MyObject<T>::~MyObject() ;
template <typename T>
void MyObject<T>::Init(Handle<Object> exports)
<...>
我的对象.h:
<...>
template <typename T>
class MyObject : public node::ObjectWrap
public:
static void Init(v8::Handle<v8::Object> exports);
private:
MyObject();
~MyObject();
static v8::Handle<v8::Value> New(const v8::Arguments& args);
static v8::Handle<v8::Value> PlusOne(const v8::Arguments& args);
T counter_;
;
【问题讨论】:
【参考方案1】:C++ 模板排除了单独的编译单元,至少您在此处所做的那样。你的addon.cc
想要一个MyObject<double>
,并假设它将在稍后定义(并在运行时动态链接期间解决)。但是myobject.cc
不知道你想要一个double
-instantiated MyObject
,所以编译器在生成myobject.o
时不会生成它。
为了解决您的困境,只需将myobject.cc
的内容放入myobject.h
即可。即把MyObject
的定义放到你的头文件中;不要将其作为单独的编译单元。
【讨论】:
它是这样工作的,但 definition 不应该在 .c/cc 文件和 .h 中的类/函数原型中,不是吗?我的意思是您的解决方案有效,但它是正确的方式吗? 没关系,我找到了答案:***.com/questions/5612791/c-template-and-header-files以上是关于C++ 模板类绑定到 nodejs的主要内容,如果未能解决你的问题,请参考以下文章