0

我正在尝试使用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)
    ;
}

我让它适用于一个类似的功能,它没有包含在一个类中。为什么我现在收到此错误?

4

2 回答 2

1

我不熟悉boost::python,但我相信你只需要&传递会员的地址.def("addTwoNumbers", &Demo::addTwoNumbers)。非成员函数和静态成员函数可以隐式转换为函数指针,但非静态成员函数不同,需要&传递地址。

于 2012-11-30T21:58:41.123 回答
0

错误信息非常清楚;addTwoNumbers是 的成员函数Demo,而不是静态函数,但您正试图将其作为静态函数调用。你必须有一个实例Demo来调用它。

在您的情况下,addTwoNumbers不需要是成员函数,因此只需将其设为静态即可。以供将来参考: http: //www.parashift.com/c++-faq/pointers-to-members.html

于 2012-11-30T22:00:51.170 回答