Python中文
首页
教程
问答
标签
搜索
登录
注册
Boost不能包装passin变量
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我尝试使用<code><boost/python></code>将列表包装为字符串向量,其中出现了“undefined symbol”错误:</p> <pre><code>/* *.cpp */ using namespace std; using namespace boost::python; // convert python list to vector vector<string> list_to_vec_string(list& l) { vector<string> vec; for (int i = 0; i < len(l); ++i) vec.push_back(extract<string>( l[i] )); return vec; }; bool validateKeywords(list& l){ vector<string> keywords = list_to_vec_string(l); // do somethoing }; </code></pre> <p>我有</p> <pre><code>/* wrapper.cpp */ BOOST_PYTHON_MODULE(testmodule){ // expose just one function def("validateKeywords", validateKeywords); } </code></pre> <p>导入模块时,返回错误</p> <pre><code>Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: /usr/local/lib/python2.7/dist-packages/testmodule.so: undefined symbol: _Z16validateKeywordsSt6vectorISsSaISsEE </code></pre> <p>在我的测试中,如果我只转换返回值,即从<code>vector<string></code>到<code>list</code>,一切都正常。只是无法使它与传入变量一起工作。除非传入不需要包装的类型(int、char、bool、void),否则问题不会消失</p> <hr/> <p><strong>更新</strong></p> <p>您可以做什么:</p> <pre><code>/*pass in a variable that do not need a wrapper*/ // testmodule.cpp void sayHello(const std::string& msg) { std::cout << msg << endl; } // wrapper.cpp BOOST_PYTHON_MODULE(testmodule) { def("sayHello", sayHello); } // demo.py import testmodule as tm tm.sayHello('hello!') // output >> hello! /*wrap a returned value from a function*/ // testmodule.cpp vector<int> vecint(int i) { vector<int> v(i); return v; } // wrapper.cpp boost::python::list vecint_wrapper(int i) { boost::python::list l; vector<int> v = vecint(i); for (int j=0; j<v.size(); ++j) l.append(v[j]); return l; // then you have a list } /*cannot change passed in values to more complicate types*/ </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您未在以下行中获得参考:</p> <pre><code>def("validateKeywords", validateKeywords); </code></pre> <p>尝试使用</p> <pre><code>def("validateKeywords", &validateKeywords ); </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何在乒乓球比赛中预测球的轨迹,对于AI球拍预测?
8 回答
如何在乒乓球游戏中阻止球
4 回答
如何在乘法和模中不乘空间?
9 回答
如何在乘法和除以2个不同的数字之间进行交换?
4 回答
如何在也是数据一部分的单个字符上拆分大字符串
4 回答
如何在乾草堆中找到針,有更好的解決方案嗎?
1 回答
如何在事件wxWidgets中传递自定义数据
1 回答
如何在事件中使用lambda i=i?
2 回答
如何在事件中心只接收最近的数据
5 回答
如何在事件发生之前保持云函数运行?
1 回答
如何在事件发生后使页面重定向到同一页面
5 回答
如何在事件回调之间保持python生成器的状态
9 回答
如何在事件处理程序(pythonsocket、sphinx)中保留docstring
4 回答
如何在事件处理程序中更改wxRichTextCtrl的光标位置?
10 回答
如何在事件处理程序中访问外部对象?
4 回答
如何在事件循环中将协程打包为正常函数?
2 回答
如何在事件循环之外运行协同程序?
5 回答
如何在事件循环结束时为并发未来的所有线程调用类方法?
6 回答
如何在事件文件中只保留一份摘要?
9 回答
如何在事件模板中添加事件
3 回答