将 boost::asio::ip::地址运算符 == 导出到 python

Exporting boost::asio::ip::address operator == to python

本文关键字:python 地址 boost asio ip 运算符      更新时间:2023-10-16

我正在尝试使用boost python将boost::asio::ip::address导出到python。大多数类导出对于我的需求来说都是微不足道的,因为这些是简单的成员函数。

但是,当我导出比较运算符时,我看到它们是这样定义的:

friend bool operator==(const address& a1, const address& a2)

此语法 AFAIK 将运算符声明为非成员函数,而是命名空间函数。(使其无法导出到Python)

有没有办法调整 boost-python 以将其导出到 cmp 运算符,以允许 python 为我比较这些对象?或者我唯一的选择是用C++为这个类编写一些包装器并在那里实现适当的成员比较函数?

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

#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);
}

瞧!这就是您所需要的。