Die C++-APIs in bind.h definieren
Eine Leitdokumentation für diese API finden Sie unter Embind.
Inhaltsverzeichnis
EMSCRIPTEN_BINDINGS(name)¶Diese Definition wird verwendet, um C++-Klassen, -Funktionen und andere Konstrukte an JavaScript zu binden. Sie wird je nach dem zugeordneten Konstrukt unterschiedlich verwendet – siehe das Embind-Handbuch für Beispiele.
name – Dies ist ein Etikett, um eine Gruppe verwandter Bindungen zu kennzeichnen (zum Beispiel EMSCRIPTEN_BINDINGS(physics), EMSCRIPTEN_BINDINGS(components), usw.)
Derzeit wird nur die Richtlinie allow_raw_pointers unterstützt. Eventuell hoffen wir, Boost.Python-ähnliche Rohzeiger-Richtlinien zur Verwaltung der Objekt-Eigentümerschaft zu implementieren.
allow_raw_pointers¶Diese Richtlinie wird verwendet, um Rohzeiger zuzulassen.
Transform::type¶allow_raw_pointer¶select_overload(typename std::add_pointer<Signature>::type fn)¶// Prototype
template<typename Signature>
typename std::add_pointer<Signature>::type select_overload(typename std::add_pointer<Signature>::type fn)
typename std::add_pointer<Signature>::type fn –
select_overload()¶// Prototype
template<typename Signature, typename ClassType>
typename internal::MemberFunctionType<ClassType, Signature>::type select_overload(Signature (ClassType::*fn))
Signature (ClassType::*fn) –
select_const()¶// Prototype
template<typename ClassType, typename ReturnType, typename... Args>
auto select_const(ReturnType (ClassType::*method)(Args...) const)
ReturnType (ClassType::*method)(Args...) const –
optional_override(const LambdaType &fp)¶// Prototype
template<typename LambdaType>
typename internal::CalculateLambdaSignature<LambdaType>::type optional_override(const LambdaType& fp)
const LambdaType& fp –
function()¶//prototype
template<typename ReturnType, typename... Args, typename... Policies>
void function(const char* name, ReturnType (*fn)(Args...), Policies...)
Registriert eine Funktion zum Export nach JavaScript. Dies wird innerhalb eines EMSCRIPTEN_BINDINGS()-Blocks aufgerufen.
Zum Beispiel zum Exportieren der Funktion lerp()
// quick_example.cpp
#include <emscripten/bind.h>
using namespace emscripten;
float lerp(float a, float b, float t) {
return (1 - t) * a + t * b;
}
EMSCRIPTEN_BINDINGS(my_module) {
function("lerp", &lerp);
}
const char* name – Der Name der zu exportierenden Funktion (z.B. "lerp").
ReturnType (*fn)(Args...) – Funktionszeigeradresse für die exportierte Funktion (z.B. &lerp).
Policies... – Richtlinie zur Verwaltung der Eigentümerschaft von Rohzeigerobjekten. Muss derzeit allow_raw_pointers sein.
value_array : public internal::noncopyable¶class_type¶Ein Typedef von ClassType, dem Typnamen des getypten Typs für die Klasse.
value_array(const char *name)¶Konstruktor.
const char* name –
~value_array()¶Destruktor.
element(ElementType InstanceType::*field)¶ElementType InstanceType::*field – Beachten Sie, dass ElementType und InstanceType Typnamen (getypte Typen) sind.
element(Getter getter, Setter setter)¶Getter getter – Beachten Sie, dass Getter ein Typname (getypter Typ) ist.
Setter setter – Beachten Sie, dass Setter ein Typname (getypter Typ) ist.
element(index<Index>)¶index<Index> – Beachten Sie, dass Index ein ganzzahliger Vorlagenparameter ist.
value_object : public internal::noncopyable¶class_type¶Ein Typedef von ClassType, dem Typnamen des getypten Typs für die Klasse.
value_object(const char *name)¶Konstruktor.
const char* name –
~value_object()¶Destruktor.
field(const char *fieldName, FieldType InstanceType::*field)¶const char* fieldName –
FieldType InstanceType::*field –
field(const char *fieldName, Getter getter, Setter setter)¶const char* fieldName –
Getter getter – Beachten Sie, dass Getter ein Typname (getypter Typ) ist.
Setter setter – Beachten Sie, dass Setter ein Typname (getypter Typ) ist.
field(const char *fieldName, index<Index>)¶const char* fieldName –
index<Index> – Beachten Sie, dass Index ein ganzzahliger Vorlagenparameter ist.
default_smart_ptr_trait¶//prototype
template<typename PointerType>
struct default_smart_ptr_trait
get_sharing_policy()¶void* v –
construct_null()¶Beachten Sie, dass der zurückgegebene PointerType ein Typname (getypter Typ) ist.
smart_ptr_trait¶//prototype
template<typename PointerType>
struct smart_ptr_trait : public default_smart_ptr_trait<PointerType>
element_type¶//prototype
typedef typename PointerType::element_type element_type;
Ein Typedef für PointerType::element_type, wobei PointerType ein Typname (getypter Typ) ist.
get(const PointerType &ptr)¶const PointerType& ptr – Beachten Sie, dass PointerType ein Typname (getypter Typ) ist.
//prototype
template<typename PointeeType>
struct smart_ptr_trait<std::shared_ptr<PointeeType>>
Ein Typedef zu std::shared_ptr<PointeeType>, wobei PointeeType ein Typname (getypter Typ) ist.
Ein Typedef für den PointerType::element_type.
const PointerType& ptr –
PointeeType* p – Beachten Sie, dass PointeeType ein Typname (getypter Typ) ist.
EM_VAL v –
wrapper : public T, public internal::WrapperBase¶//prototype
template<typename T>
class wrapper : public T, public internal::WrapperBase
class_type¶Ein Typedef von T, dem Typnamen des getypten Typs für die Klasse.
wrapper(val &&wrapped, Args&&... args)¶//prototype
template<typename... Args>
explicit wrapper(val&& wrapped, Args&&... args)
: T(std::forward<Args>(args)...)
, wrapped(std::forward<val>(wrapped))
Konstruktor.
val&& wrapped –
Args&&... args – Beachten Sie, dass Args ein Typname (getypter Typ) ist.
~wrapper()¶Destruktor.
call(const char *name, Args&&... args) const¶Konstruktor.
const char* name –
Args&&... args – Beachten Sie, dass Args ein Typname (getypter Typ) ist.
Beachten Sie, dass ReturnType ein Typname (getypter Typ) ist.
EMSCRIPTEN_WRAPPER(T)¶T –
base¶class_type¶Ein Typedef von BaseClass, dem Typnamen des getypten Typs für die Klasse.
verify()¶Hinweis: ist eine Vorlagenfunktion, die den Typnamen ClassType akzeptiert.
get()¶template<typename ClassType>
using Upcaster = BaseClass* (*)(ClassType*);
template<typename ClassType>
using Downcaster = ClassType* (*)(BaseClass*);
getUpcaster()¶//prototype
template<typename ClassType>
static Upcaster<ClassType> getUpcaster()
getDowncaster()¶//prototype
template<typename ClassType>
static Downcaster<ClassType> getDowncaster()
convertPointer(From *ptr)¶//prototype
template<typename From, typename To>
static To* convertPointer(From* ptr)
From* ptr –
pure_virtual¶constructor¶Beachten Sie, dass dies eine Vorlagenstruktur ist, die den Typnamen ... ConstructorArgs akzeptiert.
class_¶Beachten Sie, dass dies eine Vorlagenklasse mit den Typnamenparametern ClassType und BaseSpecifier ist.
class_type¶Ein Typedef von ClassType (ein Typname für die Klasse).
base_specifier¶Ein Typedef von BaseSpecifier (ein Typname für die Klasse).
HELPNEEDEDHERE¶class_() = delete;
class_(const char *name)¶//prototype
EMSCRIPTEN_ALWAYS_INLINE explicit class_(const char* name)
Konstruktor.
const char* name –
smart_ptr(const char *name) const¶//prototype
template<typename PointerType>
EMSCRIPTEN_ALWAYS_INLINE const class_& smart_ptr(const char* name) const
const char* name –
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
constructor() const¶//prototype
template<typename... ConstructorArgs, typename... Policies>
EMSCRIPTEN_ALWAYS_INLINE const class_& constructor(Policies... policies) const
Argumentlose Form des Klassenkonstruktors. Dies ruft den natürlichen Konstruktor mit den in der Vorlage angegebenen Argumenten auf. Weitere Informationen finden Sie unter Externe Konstruktoren.
Policies... policies – Richtlinie zur Verwaltung der Eigentümerschaft von Rohzeigerobjekten. Muss derzeit allow_raw_pointers sein.
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
constructor(Callable callable, Policies...) const¶//prototype
template<typename Signature = internal::DeduceArgumentsTag, typename Callable, typename... Policies>
EMSCRIPTEN_ALWAYS_INLINE const class_& constructor(Callable callable, Policies...) const
Klassenkonstruktor für Objekte, die eine Fabrikfunktion zur Erstellung des Objekts verwenden. Diese Methode akzeptiert entweder einen Funktionszeiger, ein std::function-Objekt oder ein Funktionsobjekt, das ein neu konstruiertes Objekt zurückgibt. Wenn das Callable ein Funktionsobjekt ist, muss die Funktionssignatur explizit im Vorlagenparameter Signature im Format ReturnType (Args...) angegeben werden. Für Callable-Typen, die keine Funktionsobjekte sind, wird die Methodensignatur abgeleitet.
Die folgenden sind alle gültige Aufrufe von constructor
using namespace std::placeholders;
myClass1.constructor(&my_factory);
myClass2.constructor(std::function<ClassType2(float, float)>(&class2_factory));
myClass3.constructor<ClassType3(const val&)>(std::bind(Class3Functor(), _1));
Weitere Informationen finden Sie unter Externe Konstruktoren.
Callable callable – Beachten Sie, dass Callable entweder ein Member-Funktionszeiger, ein Funktionszeiger, ein std::function oder ein Funktionsobjekt sein kann.
Policies... policies – Richtlinie zur Verwaltung der Eigentümerschaft von Rohzeigerobjekten. Muss derzeit allow_raw_pointers sein.
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
smart_ptr_constructor() const¶//prototype
template<typename SmartPtr, typename... Args, typename... Policies>
EMSCRIPTEN_ALWAYS_INLINE const class_& smart_ptr_constructor(const char* smartPtrName, SmartPtr (*factory)(Args...), Policies...) const
const char* smartPtrName –
SmartPtr (*factory)(Args...) –
Policies... policies – Richtlinie zur Verwaltung der Eigentümerschaft von Rohzeigerobjekten. Muss derzeit allow_raw_pointers sein.
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
allow_subclass() const¶//prototype
template<typename WrapperType, typename PointerType, typename... ConstructorArgs>
EMSCRIPTEN_ALWAYS_INLINE const class_& allow_subclass(
const char* wrapperClassName,
const char* pointerName,
::emscripten::constructor<ConstructorArgs...> = ::emscripten::constructor<>()
) const
const char* wrapperClassName –
const char* pointerName –
emscripten::constructor<ConstructorArgs...> constructor) –
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
allow_subclass(const char *wrapperClassName, emscripten::constructor<ConstructorArgs...> constructor) const¶//prototype
template<typename WrapperType, typename... ConstructorArgs>
EMSCRIPTEN_ALWAYS_INLINE const class_& allow_subclass(
const char* wrapperClassName,
::emscripten::constructor<ConstructorArgs...> constructor = ::emscripten::constructor<>()
) const
const char* wrapperClassName –
::emscripten::constructor<ConstructorArgs...> constructor) –
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
function() const¶//prototype
template<typename Signature = internal::DeduceArgumentsTag, typename Callable, typename... Policies>
EMSCRIPTEN_ALWAYS_INLINE const class_& function(const char* methodName, Callable callable, Policies...) const
Diese Methode dient zur Deklaration einer Methode, die zu einer Klasse gehört.
Auf der JavaScript-Seite ist dies eine Funktion, die als Eigenschaft des Prototyps gebunden wird. Zum Beispiel würde .function("myClassMember", &MyClass::myClassMember) myClassMember an MyClass.prototype.myClassMember in JavaScript binden. Diese Methode akzeptiert entweder einen Zeiger auf eine Member-Funktion, einen Funktionszeiger, ein std::function-Objekt oder ein Funktionsobjekt. Wenn das Callable kein Zeiger auf eine Member-Funktion ist, muss es den ClassType als ersten (this)-Parameter akzeptieren. Wenn das Callable ein Funktionsobjekt ist, muss die Funktionssignatur explizit im Vorlagenparameter Signature im Format ReturnType (Args...) angegeben werden. Für Callable-Typen, die keine Funktionsobjekte sind, wird die Methodensignatur abgeleitet.
Ein Methodenname, der im menschenlesbaren bekannten Symbolformat angegeben ist (z.B. @@iterator), wird unter Verwendung des benannten Symbol für JavaScript gebunden (z.B. Symbol.iterator).
Die folgenden sind alle gültige Aufrufe von function
using namespace std::placeholders;
myClass.function("myClassMember", &MyClass::myClassMember)
.function("myFreeFunction", &my_free_function)
.function("myStdFunction", std::function<float(ClassType&, float, float)>(&my_function))
.function<val(const MyClass&)>("myFunctor", std::bind(&my_functor_taking_this, _1));
const char* methodName –
Callable callable – Beachten Sie, dass Callable entweder ein Member-Funktionszeiger, ein Funktionszeiger, ein std::function oder ein Funktionsobjekt sein kann.
typename... Policies – Richtlinie zur Verwaltung der Eigentümerschaft von Rohzeigerobjekten. Muss derzeit allow_raw_pointers sein.
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
property() const¶//prototype
template<typename FieldType, typename = typename std::enable_if<!std::is_function<FieldType>::value>::type>
EMSCRIPTEN_ALWAYS_INLINE const class_& property(const char* fieldName, const FieldType ClassType::*field) const
const char* fieldName –
const FieldType ClassType::*field –
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
property(const char *fieldName, FieldType ClassType::*field) const¶//prototype
template<typename FieldType, typename = typename std::enable_if<!std::is_function<FieldType>::value>::type>
EMSCRIPTEN_ALWAYS_INLINE const class_& property(const char* fieldName, FieldType ClassType::*field) const
const char* fieldName –
FieldType ClassType::*field –
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
property(const char *fieldName, Getter getter) const¶//prototype
template<typename PropertyType = internal::DeduceArgumentsTag, typename Getter>
EMSCRIPTEN_ALWAYS_INLINE const class_& property(const char* fieldName, Getter getter) const;
Deklariert eine schreibgeschützte Eigenschaft mit dem angegebenen fieldName in der Klasse unter Verwendung des angegebenen getter, um den Eigenschaftswert abzurufen. Getter kann entweder eine Klassenmethode, eine Funktion, eine std::function oder ein Funktionsobjekt sein. Wenn Getter kein Zeiger auf eine Member-Funktion ist, muss es eine Instanz des ClassType als this-Argument akzeptieren. Wenn Getter ein Funktionsobjekt ist, muss der Eigenschaftstyp als Vorlagenparameter angegeben werden, da er nicht abgeleitet werden kann, z.B.: myClass.property<int>("myIntProperty", MyIntGetterFunctor());
const char* fieldName –
Getter getter – Beachten Sie, dass Getter ein Typname für eine Funktion ist.
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
property(const char *fieldName, Getter getter, Setter setter) const¶//prototype
template<typename PropertyType = internal::DeduceArgumentsTag, typename Getter, typename Setter>
EMSCRIPTEN_ALWAYS_INLINE const class_& property(const char* fieldName, Getter getter, Setter setter) const
Dies ist eine Funktionenvorlage, die Typnamen Setter und Getter annimmt: template<typename Getter, typename Setter>, die eine Lese-Schreib-Eigenschaft mit dem angegebenen fieldName in der Klasse deklariert. Getter und Setter können entweder eine Klassenmethode, eine Funktion, ein std::function oder ein Funktionsobjekt sein. Wenn Getter oder Setter kein Zeiger auf eine Member-Funktion ist, muss es eine Instanz des ClassType als this-Argument akzeptieren. Wenn Getter oder Setter ein Funktionsobjekt ist, muss der Eigenschaftstyp als Vorlagenparameter angegeben werden, da er nicht abgeleitet werden kann, z.B.: myClass.property<int>("myIntProperty", MyIntGetterFunctor(), MyIntSetterFunctor());
const char* fieldName –
Getter getter – Beachten Sie, dass Getter ein Typname für eine Funktion ist.
Setter setter – Beachten Sie, dass Setter ein Typname für eine Funktion ist.
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
class_function() const¶//prototype
template<typename ReturnType, typename... Args, typename... Policies>
EMSCRIPTEN_ALWAYS_INLINE const class_& class_function(const char* methodName, ReturnType (*classMethod)(Args...), Policies...) const
Diese Methode dient zur Deklaration einer statischen Funktion, die zu einer Klasse gehört.
Auf der JavaScript-Seite ist dies eine Funktion, die als Eigenschaft des Konstruktors gebunden wird. Zum Beispiel bindet .class_function("myStaticFunction", &MyClass::myStaticFunction) myStaticFunction an MyClass.myStaticFunction.
Ein Methodenname, der im menschenlesbaren bekannten Symbolformat angegeben ist (z.B. @@species), wird unter Verwendung des benannten Symbol für JavaScript gebunden (z.B. Symbol.species).
const char* methodName –
ReturnType (*classMethod)(Args...) –
Policies... – Richtlinie zur Verwaltung der Eigentümerschaft von Rohzeigerobjekten. Muss derzeit allow_raw_pointers sein.
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
class_property(const char *fieldName, FieldType *field) const¶//prototype
template<typename FieldType>
EMSCRIPTEN_ALWAYS_INLINE const class_& property(const char* fieldName, FieldType *field) const
const char* fieldName –
FieldType ClassType::*field –
Eine const-Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung der class_-Funktionen, die die Bindung im EMSCRIPTEN_BINDINGS()-Block definieren.
enum_¶//prototype
template<typename EnumType>
class enum_
Registriert ein Enum zum Export nach JavaScript. Dies wird innerhalb eines EMSCRIPTEN_BINDINGS()-Blocks aufgerufen und funktioniert sowohl mit C++98-Enums als auch mit C++11 „enum classes“. Weitere Informationen finden Sie unter Enums.
enum_type¶Ein Typedef von EnumType (ein Typname für die Klasse).
enum_(const char *name)¶Konstruktor.
const char* name –
value(const char *name, EnumType value)¶Registriert einen Enum-Wert.
const char* name – Der Name des aufgezählten Werts.
EnumType value – Der Typ des aufgezählten Werts.
Eine Referenz auf das aktuelle Objekt. Dies ermöglicht die Verkettung mehrerer Enum-Werte im EMSCRIPTEN_BINDINGS()-Block.
constant(const char *name, const ConstantType &v)¶//prototype
template<typename ConstantType>
void constant(const char* name, const ConstantType& v)
Registriert eine Konstante zum Export nach JavaScript. Dies wird innerhalb eines EMSCRIPTEN_BINDINGS()-Blocks aufgerufen.
EMSCRIPTEN_BINDINGS(my_constant_example) {
constant("SOME_CONSTANT", SOME_CONSTANT);
}
const char* name – Der Name der Konstante.
const ConstantType& v – Der Konstantentyp. Dies kann jeder von embind bekannte Typ sein.