Han*_*ans 6 c++ boost boost-python comparison-operators
我想公开C++代码
std::vector<A>
Run Code Online (Sandbox Code Playgroud)
到python.我的
class A{};
Run Code Online (Sandbox Code Playgroud)
没有实现比较运算符.当我尝试
BOOST_PYTHON_MODULE(libmyvec)
{
using namespace boost::python;
class_<A>("A");
class_<std::vector<A> >("Avec")
.def(boost::python::vector_indexing_suite<std::vector<A> >());
}
Run Code Online (Sandbox Code Playgroud)
我收到有关比较运算符的错误.如果我将A的定义更改为
class A {
public:
bool operator==(const A& other) {return false;}
bool operator!=(const A& other) {return true;}
};
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力.
为什么我需要实现这些比较运算符?vector_indexing_suite没有它们有没有办法使用它们?
vector_indexing_suite实现一个__contains__成员函数,它需要存在一个相等运算符.因此,您的类型必须提供此类操作员.
Sandbox版本的Boost.Python通过使用特征来确定容器上可用的操作类型来解决此问题.例如,find只有在值相等的情况下才会提供.
默认情况下,Boost.Python认为所有值都是可比较的,而不是可比较的.由于您的类型不符合这些要求,因此您需要专门化特征以指定它支持的操作:
namespace indexing {
template<>
struct value_traits<A> : public value_traits<int>
{
static bool const equality_comparable = false;
static bool const lessthan_comparable = false;
};
}
Run Code Online (Sandbox Code Playgroud)
这在此处记录.
| 归档时间: |
|
| 查看次数: |
2133 次 |
| 最近记录: |