std::vector<std::tuple<>> working only with NoProxy set with vector_indexing_suite
- 主要语言
- C++
- 星标
- 537
- 派生
- 223
- 平均合并
- 11 小时 22 分钟
- 30 天内合并 PR
- 2
描述
Hi, I'm trying to export from C++ an std::vector of a tuple. Unfortunately, while both the vector (exported via `vector_indexing_suite`) and the tuple (exported via `to_python_converter`) themselves are exported correctly and can be accessed, accessing a tuple element *from* the vector results in an `No Python class registered for C++ class` error. This does not happen when the `vector_indexing_suite` has the `NoProxy` template parameter set to `true`, which for me is undesirable.
Am I doing something wrong, or is there a way to bypass this limitation?
Here is a MVE:
```
#include
#include
#include
#include
template
struct TupleToPython {
TupleToPython() {
boost::python::to_python_converter>();
}
template
struct sequence {};
template
struct generator : generator { };
template
struct generator<0, S...> {
using type = sequence;
};
template
static boost::python::tuple boostConvertImpl(const T& t, sequence) {
return boost::python::make_tuple(std::get(t)...);
}
template
static boost::python::tuple boostConvert(const std::tuple & t) {
return boostConvertImpl(t, typename generator::type());
}
static PyObject* convert(const T& t) {
return boost::python::incref(boostConvert(t).ptr());
}
};
using MyTuple = std::tuple;
using Tuples = std::vector;
MyTuple makeMyTuple() {
return MyTuple();
}
Tuples makeTuples() {
return Tuples{MyTuple()};
}
BOOST_PYTHON_MODULE(h)
{
using namespace boost::python;
TupleToPython();
def("makeMyTuple", makeMyTuple);
class_>{"Tuples"}
.def(vector_indexing_suite>());
def("makeTuples", makeTuples);
}
```
Then from Python:
```
>>> print makeMyTuple()
(0,)
>>> print makeTuples()
>>> print makeTuples()[0]
Traceback (most recent call last):
File "", line 1, in
TypeError: No Python class registered for C++ class std::tuple
>>>
```
贡献指南
这个仓库没有索引到贡献指南
评估
这个 Issue 还没有评估数据。