我正在尝试使用boost python包含一个名为“addTwoNumbers”的函数的简单演示类。这是头文件:
#ifndef DEMO_H_
#define DEMO_H_
#include <boost/function.hpp>
class Demo
{
public:
Demo() {}
virtual ~Demo() {}
typedef void (DemoCb) (int,int,int);
boost::function<DemoCb> onAddTwoNumbers;
int addTwoNumbers(int x, int y);
// Executes a callback within a thread not controlled by the caller.
void addTwoNumbersAsync(int x, int y, boost::function<DemoCb> callback);
};
#endif /* DEMO_H_ */
这是包装:
#include <boost/python.hpp>
#include "../demo.h"
using namespace boost::python;
// Create a python module using boost. The name 'demo' must match the name in the makefile
BOOST_PYTHON_MODULE(python_wrap_demo) {
// Wrapping the addTwoNumbers function:
class_<Demo>("Demo", init<>())
.def("addTwoNumbers", Demo::addTwoNumbers)
;
}
我让这个用于类似的功能,它没有包含在类中。为什么我现在收到此错误?
答案 0 :(得分:1)
我不熟悉boost::python
,但我相信您只需要&
来传递成员.def("addTwoNumbers", &Demo::addTwoNumbers)
的地址。非成员函数和静态成员函数可以隐式转换为函数指针,但非静态成员函数是不同的,您需要&
来传递地址。
答案 1 :(得分:0)
错误信息非常清楚; addTwoNumbers
是Demo
的成员函数,而不是静态函数,但您试图将其称为静态函数。您必须有一个Demo
的实例才能调用它。
在您的情况下,addTwoNumbers
不需要是成员函数,因此只需将其设置为静态。有关日后参考,请参阅:http://www.parashift.com/c++-faq/pointers-to-members.html