如何使用 Boost.Python 重载运算符

发布于 2024-08-04 09:32:40 字数 2093 浏览 6 评论 0 原文

我正在尝试使用 Boost.Python 重载 C++ 类的运算符。

根据 this,我正在以正确的方式这样做......但我有一堆编译器错误。

这是我试图查明问题的一个简单示例:

#include "boost/python.hpp"

using namespace boost::python;

class number
{
public:
    number(int i) : m_Number(i) { }
    number operator+(int i) { return number(m_Number + i); }
private:
    int m_Number;
};

BOOST_PYTHON_MODULE(test)
{
    class_<number>("number", init<int>())
        .def(self() + int());
}

这是编译器错误:

Error   1   error C2064: term does not evaluate to a function taking 0 arguments    c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest
Error   2   error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,Fn,const A1 &,const A2 &,const A3 &)' : expects 5 arguments - 1 provided c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest
Error   3   error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,Fn,const A1 &,const A2 &)' : expects 4 arguments - 1 provided    c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest
Error   4   error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,A1,const A2 &)' : expects 3 arguments - 1 provided   c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest
Error   5   error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,F)' : expects 2 arguments - 1 provided   c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest

我在这里遗漏了什么吗?

谢谢

I am trying to overload operators of a C++ class using Boost.Python.

According to this, I am doing it the right way... but I have a bunch of compiler errors.

Here is a simple example I made trying to pinpoint the problem:

#include "boost/python.hpp"

using namespace boost::python;

class number
{
public:
    number(int i) : m_Number(i) { }
    number operator+(int i) { return number(m_Number + i); }
private:
    int m_Number;
};

BOOST_PYTHON_MODULE(test)
{
    class_<number>("number", init<int>())
        .def(self() + int());
}

Here are the compiler errors:

Error   1   error C2064: term does not evaluate to a function taking 0 arguments    c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest
Error   2   error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,Fn,const A1 &,const A2 &,const A3 &)' : expects 5 arguments - 1 provided c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest
Error   3   error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,Fn,const A1 &,const A2 &)' : expects 4 arguments - 1 provided    c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest
Error   4   error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,A1,const A2 &)' : expects 3 arguments - 1 provided   c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest
Error   5   error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,F)' : expects 2 arguments - 1 provided   c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp   16  BoostPythonTest

Am I missing something here ?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小苏打饼 2024-08-11 09:32:40

我没有使用过 boost.python,但是当某些模板魔术尝试将某些内容绑定到其他内容时,您的错误看起来像是存在一些不兼容的参数。

因此,我查看了您提供的链接,发现了一个主要区别:

class_<X>("X")
    .def(self + int())

与您的链接相比

class_<number>("number", init<int>())
    .def(self() + int());

,我猜, selfself() 可以做到这一点。

I've not used boost.python, but your errors look like there are some incompatible arguments when some template magic tries to bind something to something else.

So I looked at the link you provided, and found one major difference:

class_<X>("X")
    .def(self + int())

vs yours

class_<number>("number", init<int>())
    .def(self() + int());

I guess, self and self() could do that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文