Exporting wrapped functions doesn't work
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 38/100
Rechercherichtung
Beginne damit, die Beispiele für umschlossene Funktionen im Issue zu reproduzieren, und untersuche dann den Einstiegspunkt boost::python::def und dessen Behandlung aufrufbarer Objekte. Als erledigt gilt, wenn die umschlossenen Beispiele add2 und add erfolgreich exportiert werden können und damit den Fällen entsprechen, die bereits direkt funktionieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
I find myself in need of exporting a whole lot of functions to Python which require a wrapper (the API needs locking and whatnot).
The following code probably should work (pybind11 can handle it, for the most part), but doesn't.
#include <iostream>
#include <boost/python.hpp>
template <class R, class... Args>
struct wrap
{
using funct_type = R(*)(Args...);
funct_type func;
wrap(funct_type f): func(f) {};
R operator()(Args&&... args)
{
std::cout << "before calling\n";
R ret=func(std::forward<Args>(args)...);
std::cout << "After calling\n";
return ret;
}
};
class bar {};
class foo : bar {
public:
enum xfoo { FOO=1, BAR=2, BAZ=3 };
static int add(int a, int b, enum xfoo c) { return a+b; }
static int add2(int a, int b) { return a+b; }
};
BOOST_PYTHON_MODULE(example)
{
using namespace boost::python;
// this works
std::cout << "Result" << wrap{foo::add}(1,2, foo::xfoo::FOO) << std::endl;
// so does this
def("add", foo::add, "A function that adds two numbers and no enum");
// this works with pybind11 but not boost
def("add2", wrap{foo::add2}, "A function that adds two numbers");
// this works with neither
def("add", wrap{foo::add}, "A function that adds two numbers and no enum");
}
- Vorherrschende Sprache
- C++
- Sterne
- 537
- Forks
- 223
- Ø Merge
- 11 Std. 22 Min.
- Gemergte PRs (30 T.)
- 2
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus boostorg/python
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 84/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
-
BoostDetectToolset-1.90.0.cmake file not found in an include() call in boost_python-config.cmake Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 48/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 25/100
Alle Issues in boostorg/python
Ähnliche Issues
-
enhancement
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
QuantStack/git2cpp#187 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
mlcommons/mobile_app_open#1182 ·
-
Needs-Triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
microsoft/winget-cli#6547 ·
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
AXERA-TECH/ax-llm#77 ·