为了账号安全,请及时绑定邮箱和手机立即绑定

在 cython 中访问 C++ 模板类

在 cython 中访问 C++ 模板类

浮云间 2023-10-26 15:39:37
我有一个名为的模板类,List在名为的文件中定义containers.h:#include <iostream>#include <vector>namespace containers {    template <class T> class List {        private:            std::vector<T> vector;        public:            List() {};            ~List() {};            void append(T* item) {                vector.push_back(*item);            }            void print_items() {                for ( T item : vector ) {                    std::cout << item << std::endl;                }            }    };}我正在尝试使用以下代码将此类导入 Cython main.pyx:#!python# cython: language_level = 3# distutils: language = c++cdef extern from "containers.h" namespace "containers":    cdef cppclass List[T]:        List() except +        void append(T *item)        void print_items()def test():    cdef List[int] *l = new List[int]()    cdef int i    for i in range(10):        l.append(&i)    l.print_items()这就是当我尝试运行此代码时发生的情况:>>> import mainTraceback (most recent call last):  File "<stdin>", line 1, in <module>ImportError: /home/arin/Desktop/Misc/test_cpp/main.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZN10containers4ListIiEC1Ev为什么我会收到此错误以及如何修复它?
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

这只是编译时的一个愚蠢错误:在setup.py我传递"main.cpp"cythonize函数而不是"main.pyx",并且在编译时并没有导致错误,因为我有另一个名为main.cpp.



查看完整回答
反对 回复 2023-10-26
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信