c++ - 将 boost::asio::ip::address operator == 导出到 python

标签 c++ python-2.7 boost-python

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

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

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

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

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

最佳答案

实际上,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);
}

瞧!这就是您所需要的。

关于c++ - 将 boost::asio::ip::address operator == 导出到 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994521/

相关文章:

c++ - 二进制 * 运算符未找到

c++ - MSVS 12,C++,命令参数不起作用

c++ - 什么时候应该在模板函数中使用 typename?

python - 统一码编码错误 : 'charmap' codec can't encode character character maps to <undefined>

python-2.7 - 通过 XLSXwriter 在 Python 中将 URL 作为纯文本写入 Excel

python - 处理 Python 库包的最佳实践是什么?

c++ - 带有自定义分配器的 std::vector 子类与 std::vectors 之间的转换

python - 使用 Boost Python 将 C++ 函数扩展到 Python

c++ - ImportError :/usr/lib/libboost_python. so.1.54.0: undefined symbol: PyClass_Type

numpy - 在 Cython 和 Boost.Python 中扩展 NumPy 的相对优势是什么?