boostorg / boostorg/python

std::vector<std::tuple<>> working only with NoProxy set with vector_indexing_suite

Open
#112 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
537
Forks
223
Avg merge
11h 22m
Merged PRs (30d)
2

Description

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
>>>
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.