将 boost::asio::ip::address 运算符 == 导出到 python
Exporting boost::asio::ip::address operator == to python
我正在尝试使用 boost python 将 boost::asio::ip::address 导出到 python。
大多数 class 导出对于我的需求来说都是微不足道的,因为它们是简单的成员函数。
但是,当我导出比较运算符时,我看到它们是这样定义的:
friend bool operator==(const address& a1, const address& a2)
此语法 AFAIK 将运算符声明为非成员函数,而是命名空间函数。 (使其无法导出到 python)
有什么方法可以调整 boost-python 以将其导出到 cmp 运算符以允许 python 为我比较这些对象?或者我唯一的选择是用 C++ 对此 class 编写一些包装器并在那里实现适当的成员比较函数?
实际上,boost::python 非常容易。如果函数将 class 的引用作为其第一个参数,您实际上可以将任何函数导出为 class 成员。这是一个简单的例子:
#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 将 boost::asio::ip::address 导出到 python。 大多数 class 导出对于我的需求来说都是微不足道的,因为它们是简单的成员函数。
但是,当我导出比较运算符时,我看到它们是这样定义的:
friend bool operator==(const address& a1, const address& a2)
此语法 AFAIK 将运算符声明为非成员函数,而是命名空间函数。 (使其无法导出到 python)
有什么方法可以调整 boost-python 以将其导出到 cmp 运算符以允许 python 为我比较这些对象?或者我唯一的选择是用 C++ 对此 class 编写一些包装器并在那里实现适当的成员比较函数?
实际上,boost::python 非常容易。如果函数将 class 的引用作为其第一个参数,您实际上可以将任何函数导出为 class 成员。这是一个简单的例子:
#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);
}
瞧!这就是您所需要的。