C++ 将boost::asio::ip::address操作符==导出到python

C++ 将boost::asio::ip::address操作符==导出到python,c++,python-2.7,boost-python,C++,Python 2.7,Boost Python,我正在尝试使用boostpython将boost::asio::ip::address导出到python。 对于我的需求来说,类导出的大部分内容都很简单,因为它们是简单的成员函数 但是,在导出比较运算符时,我看到它们的定义如下: friend bool operator==(const address& a1, const address& a2) 此语法AFAIK将运算符声明为非成员函数,而不是名称空间函数。(使其无法移植到python) 有没有一种方法可以调整boostpy

我正在尝试使用boostpython将boost::asio::ip::address导出到python。 对于我的需求来说,类导出的大部分内容都很简单,因为它们是简单的成员函数

但是,在导出比较运算符时,我看到它们的定义如下:

friend bool operator==(const address& a1, const address& a2)
此语法AFAIK将运算符声明为非成员函数,而不是名称空间函数。(使其无法移植到python)


有没有一种方法可以调整boostpython以将其导出到cmp操作符,从而允许python为我比较这些对象?或者,我唯一的选择是在C++中编写一些包装器,并在其中实现适当的成员比较函数?如果将对类的引用作为其第一个参数,则实际上可以将任何函数导出为类成员。下面是一个简单的例子:

#include <boost/python.hpp>
using boost::python;

struct Test
{
    int i;
};

bool operator==(const Test& t1, const Test& t2)
{
    return t1.i == t2.i;
}

BOOST_PYTHON_MODULE(test)
{
    class_<Test>("Test")
        .def_readwrite("i", &Test::i)
        .def(self == self);
}
#包括
使用boost::python;
结构测试
{
int i;
};
布尔运算符==(常数测试和t1、常数测试和t2)
{
返回t1.i==t2.i;
}
BOOST_PYTHON_模块(测试)
{
类别("测试")
.def_readwrite(“i”和测试::i)
.def(self==self);
}

瞧!这就是您所需要的。

实际上,boost::python使它变得非常简单。如果将对类的引用作为其第一个参数,则实际上可以将任何函数导出为类成员。下面是一个简单的例子:

#include <boost/python.hpp>
using boost::python;

struct Test
{
    int i;
};

bool operator==(const Test& t1, const Test& t2)
{
    return t1.i == t2.i;
}

BOOST_PYTHON_MODULE(test)
{
    class_<Test>("Test")
        .def_readwrite("i", &Test::i)
        .def(self == self);
}
#包括
使用boost::python;
结构测试
{
int i;
};
布尔运算符==(常数测试和t1、常数测试和t2)
{
返回t1.i==t2.i;
}
BOOST_PYTHON_模块(测试)
{
类别("测试")
.def_readwrite(“i”和测试::i)
.def(self==self);
}
瞧!这就是你所需要的