1

だから私はstd::map<KeyType, std::shared_ptr<ValueType>>を使用してPythonに公開していmap_indexing_suiteます。

ValueTypeコード内の他の場所では、未加工のポインターを使用してマップ内のオブジェクトへの参照を保存しますValueType*。これらのコンテナーはオブジェクトを所有していないためValueType、マップは所有しています。

私の質問は、その参照を共有ポインターと比較できるように、生のポインターを python に公開するにはどうすればよいですか? このようなもの:

valueRef = getRawReference()
for x in myMap:
    if x.data() == valueRef:
        print "match"
4

1 に答える 1

1

答えは自分で見つけました。

最初に 2 つのメソッドを定義します。

bool eq(std::shared_ptr<ValueType> lhs, ValueType* rhs)
{
    return lhs.get() == rhs;
}

bool neq(std::shared_ptr<ValueType> lhs, ValueType* rhs)
{
    return lhs.get() != rhs;
}

次に、BOOST_PYTHON_MODULE で:

bp::def("getRawReference", getRawReference, bp::return_value_policy<bp::reference_existing_object>())

bp::class_<ValueType, std::shared_ptr<ValueType>>("ValueType")
    .def("__eq__", eq)
    .def("__neq__", neq);
于 2012-05-16T16:53:29.620 に答える