support for opaque types

This commit is contained in:
Wenzel Jakob
2016-03-15 15:05:40 +01:00
parent a3e34f4a5f
commit eda978e003
7 changed files with 120 additions and 1 deletions

View File

@@ -22,6 +22,7 @@ void init_ex10(py::module &);
void init_ex11(py::module &);
void init_ex12(py::module &);
void init_ex13(py::module &);
void init_ex14(py::module &);
void init_issues(py::module &);
PYBIND11_PLUGIN(example) {
@@ -40,6 +41,7 @@ PYBIND11_PLUGIN(example) {
init_ex11(m);
init_ex12(m);
init_ex13(m);
init_ex14(m);
init_issues(m);
return m.ptr();

29
example/example14.cpp Normal file
View File

@@ -0,0 +1,29 @@
/*
example/example14.cpp -- opaque types
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
All rights reserved. Use of this source code is governed by a
BSD-style license that can be found in the LICENSE file.
*/
#include "example.h"
#include <pybind11/stl.h>
#include <vector>
typedef std::vector<std::string> StringList;
void init_ex14(py::module &m) {
py::class_<py::opaque<StringList>>(m, "StringList")
.def(py::init<>())
.def("push_back", [](py::opaque<StringList> &l, const std::string &str) { l->push_back(str); })
.def("pop_back", [](py::opaque<StringList> &l) { l->pop_back(); })
.def("back", [](py::opaque<StringList> &l) { return l->back(); });
m.def("print_opaque_list", [](py::opaque<StringList> &_l) {
StringList &l = _l;
std::cout << "Opaque list: " << std::endl;
for (auto entry : l)
std::cout << " " << entry << std::endl;
});
}

14
example/example14.py Normal file
View File

@@ -0,0 +1,14 @@
from __future__ import print_function
import sys
sys.path.append('.')
from example import StringList, print_opaque_list
l = StringList()
l.push_back("Element 1")
l.push_back("Element 2")
print_opaque_list(l)
print("Back element is %s" % l.back())
l.pop_back()
print_opaque_list(l)

6
example/example14.ref Normal file
View File

@@ -0,0 +1,6 @@
Opaque list:
Element 1
Element 2
Back element is Element 2
Opaque list:
Element 1