C++模板类绑定到nodejs
C++ template class binding to nodejs
我想创建nodejs插件包装C++类模板。我将示例类从"包装C++对象"教程转换为模板。它编译时没有错误,但我在使用它时出错。
node: symbol lookup error: /home/me/projects/node-template/build/Release/addon.node: undefined symbol: _ZN8MyObjectIdE4InitEN2v86HandleINS1_6ObjectEEE
addon.cc:
<...>
void InitAll(Handle<Object> exports) {
MyObject<double>::Init(exports);
}
<...>
myobject.cc:
<...>
template <typename T>
MyObject<T>::MyObject() {};
template <typename T>
MyObject<T>::~MyObject() {};
template <typename T>
void MyObject<T>::Init(Handle<Object> exports) {
<...>
myobject.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_;
};
C++模板排除了单独的编译单元,至少在这里是这样做的。您的addon.cc
想要一个MyObject<double>
,假设它稍后会定义(并在运行时的动态链接过程中解析)。但是myobject.cc
不知道您想要一个double
实例化的MyObject
,所以编译器在生成myobject.o
时不会生成它。
要解决您的难题,只需将myobject.cc
的内容放入myobject.h
即可。也就是说,将MyObject
的定义放在头文件中;不要把它作为一个单独的编译单元。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 运行时错误:引用绑定到类型为"int"的空指针
- 有没有办法将重载的类函数绑定到函数对象?
- C++模板类绑定到nodejs