bind.hのC++ APIは以下を定義します。
このAPIのガイドドキュメントは、Embindにあります。
現在、allow_raw_pointers
ポリシーのみがサポートされています。将来的には、オブジェクトの所有権を管理するためのBoost.Pythonのようなrawポインタポリシーを実装したいと考えています。
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...)
JavaScriptにエクスポートする関数を登録します。これは、EMSCRIPTEN_BINDINGS()
ブロック内から呼び出されます。
たとえば、関数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 – エクスポートする関数の名前(例:"lerp"
)。
ReturnType (*fn)(Args...) – エクスポートされた関数の関数ポインタのアドレス(例:&lerp
)。
Policies... – rawポインタのオブジェクトの所有権を管理するためのポリシー。現在は、allow_raw_pointers
である必要があります。
value_array
: public internal::noncopyable¶class_type
¶クラスのテンプレート型である ClassType
の typedef。
value_array
(const char *name)¶コンストラクタ。
const char* name –
~value_array
()¶デストラクタ。
element
(ElementType InstanceType::*field)¶ElementType InstanceType::*field – ElementType
と InstanceType
は型名(テンプレート型)であることに注意してください。
element
(Getter getter, Setter setter)¶Getter getter – Getter
は型名(テンプレート型)であることに注意してください。
Setter setter – Setter
は型名(テンプレート型)であることに注意してください。
element
(index<Index>)¶index<Index> – Index
は整数テンプレートパラメータであることに注意してください。
value_object
: public internal::noncopyable¶class_type
¶クラスのテンプレート型である ClassType
の typedef。
value_object
(const char *name)¶コンストラクタ。
const char* name –
~value_object
()¶デストラクタ。
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 – Getter
は型名(テンプレート型)であることに注意してください。
Setter setter – Setter
は型名(テンプレート型)であることに注意してください。
field
(const char *fieldName, index<Index>)¶const char* fieldName –
index<Index> – Index
は整数テンプレートパラメータであることに注意してください。
default_smart_ptr_trait
¶//prototype
template<typename PointerType>
struct default_smart_ptr_trait
get_sharing_policy
()¶void* v –
construct_null
()¶返される PointerType
は型名(テンプレート型)であることに注意してください。
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;
PointerType
は型名(テンプレート型)であり、その PointerType::element_type の typedef です。
get
(const PointerType &ptr)¶const PointerType& ptr – PointerType
は型名(テンプレート型)であることに注意してください
//prototype
template<typename PointeeType>
struct smart_ptr_trait<std::shared_ptr<PointeeType>>
PointeeType
は型名(テンプレート型)であり、std::shared_ptr<PointeeType> の typedef です。
PointerType::element_type
の typedef です。
const PointerType& ptr –
PointeeType* p – PointeeType
は型名(テンプレート型)であることに注意してください。
EM_VAL v –
wrapper
: public T, public internal::WrapperBase¶//prototype
template<typename T>
class wrapper : public T, public internal::WrapperBase
class_type
¶クラスのテンプレート型である T
の typedef。
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))
コンストラクタ。
val&& wrapped –
Args&&... args – Args
は型名(テンプレート型)であることに注意してください。
~wrapper
()¶デストラクタ。
call
(const char *name, Args&&... args) const¶コンストラクタ。
const char* name –
Args&&... args – Args
は型名(テンプレート型)であることに注意してください。
ReturnType
は型名(テンプレート型)であることに注意してください。
EMSCRIPTEN_WRAPPER
(T)¶T –
base
¶class_type
¶BaseClass
の typedef であり、クラスのテンプレート型の型名です。
verify
()¶型名 ClassType
を取るテンプレート関数であることに注意してください。
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
¶これは、型名 ... ConstructorArgs
を取るテンプレート構造体であることに注意してください。
class_
¶これは、型名パラメータ ClassType
と BaseSpecifier
を持つテンプレートクラスであることに注意してください。
class_type
¶ClassType
(クラスの型名)の typedef です。
base_specifier
¶BaseSpecifier
(クラスの型名)の typedef です。
HELPNEEDEDHERE
¶class_() = delete;
class_
(const char *name)¶//prototype
EMSCRIPTEN_ALWAYS_INLINE explicit class_(const char* name)
コンストラクタ。
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 –
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
constructor
() const¶//prototype
template<typename... ConstructorArgs, typename... Policies>
EMSCRIPTEN_ALWAYS_INLINE const class_& constructor(Policies... policies) const
クラスコンストラクタの引数なし形式。これにより、テンプレートで指定された引数を持つ自然なコンストラクタが呼び出されます。詳細については、外部コンストラクタを参照してください。
Policies... policies – 生ポインタオブジェクトの所有権を管理するためのポリシー。現在、allow_raw_pointers
である必要があります。
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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
オブジェクトを作成するためにファクトリ関数を使用するオブジェクトのクラスコンストラクタ。このメソッドは、関数ポインタ、std::function
オブジェクト、または新しく構築されたオブジェクトを返す関数オブジェクトを受け入れます。Callable
が関数オブジェクトの場合、関数シグネチャは、ReturnType (Args...)
の形式で Signature
テンプレートパラメータで明示的に指定する必要があります。関数オブジェクト以外の Callable
型の場合、メソッドシグネチャが推論されます。
以下は、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));
詳細については、外部コンストラクタを参照してください。
Callable callable – Callable
は、メンバー関数ポインタ、関数ポインタ、std::function
、または関数オブジェクトのいずれかである可能性があることに注意してください。
Policies... policies – 生ポインタオブジェクトの所有権を管理するためのポリシー。現在、allow_raw_pointers
である必要があります。
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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 – 生ポインタオブジェクトの所有権を管理するためのポリシー。現在、allow_raw_pointers
である必要があります。
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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) –
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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) –
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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
このメソッドは、クラスに属するメソッドを宣言するためのものです。
JavaScript側では、これはプロトタイプのプロパティとしてバインドされる関数です。例えば、.function("myClassMember", &MyClass::myClassMember)
は、JavaScript の MyClass.prototype.myClassMember
に myClassMember
をバインドします。このメソッドは、メンバ関数へのポインタ、関数ポインタ、std::function
オブジェクト、または関数オブジェクトのいずれかを受け入れます。Callable
がメンバ関数へのポインタではない場合、最初の(this
)パラメータとして ClassType
を受け入れる必要があります。Callable
が関数オブジェクトの場合、関数シグネチャは ReturnType (Args...)
の形式で Signature
テンプレートパラメータで明示的に指定する必要があります。関数オブジェクト以外の Callable
型の場合、メソッドシグネチャは推論されます。
人間が読める既知のシンボル形式(例えば、@@iterator
)で指定されたメソッド名は、JavaScript の名前付き Symbol
(例えば、Symbol.iterator
)を使用してバインドされます。
以下はすべて、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 – Callable
は、メンバー関数ポインタ、関数ポインタ、std::function
、または関数オブジェクトのいずれかである可能性があることに注意してください。
typename... Policies – 生ポインタオブジェクトの所有権を管理するためのポリシー。現在は、allow_raw_pointers
である必要があります。
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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 –
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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 –
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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;
指定された getter
を使用してプロパティの値を取得し、クラスの指定された fieldName
を持つ読み取り専用のプロパティを宣言します。Getter
は、クラスメソッド、関数、std::function
、または関数オブジェクトのいずれかです。Getter
がメンバ関数へのポインタではない場合、this
引数として ClassType
のインスタンスを受け入れる必要があります。Getter
が関数オブジェクトの場合、プロパティ型は推論できないため、myClass.property<int>("myIntProperty", MyIntGetterFunctor());
のようにテンプレートパラメータとして指定する必要があります。
const char* fieldName –
Getter getter – Getter
は関数テンプレートの型名であることに注意してください。
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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
これは型名 Setter
および Getter
を取る関数テンプレートです。 template<typename Getter, typename Setter>
は、クラスの指定された fieldName
を持つ読み取り/書き込み可能なプロパティを宣言します。Getter
および Setter
は、クラスメソッド、関数、std::function
、または関数オブジェクトのいずれかです。Getter
または Setter
がメンバ関数へのポインタではない場合、this
引数として ClassType
のインスタンスを受け入れる必要があります。Getter
または Setter
が関数オブジェクトの場合、プロパティ型は推論できないため、myClass.property<int>("myIntProperty", MyIntGetterFunctor(), MyIntSetterFunctor());
のようにテンプレートパラメータとして指定する必要があります。
const char* fieldName –
Getter getter – Getter
は関数テンプレートの型名であることに注意してください。
Setter setter – Setter
は関数テンプレートの型名であることに注意してください。
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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
このメソッドは、クラスに属する静的関数を宣言するためのものです。
JavaScript側では、これはコンストラクタのプロパティとしてバインドされる関数です。例えば、.class_function("myStaticFunction", &MyClass::myStaticFunction)
は、myStaticFunction
を MyClass.myStaticFunction
にバインドします。
人間が読める既知のシンボル形式(例えば、@@species
)で指定されたメソッド名は、JavaScript の名前付き Symbol
(例えば、Symbol.species
)を使用してバインドされます。
const char* methodName –
ReturnType (*classMethod)(Args...) –
Policies... – rawポインタのオブジェクトの所有権を管理するためのポリシー。現在は、allow_raw_pointers
である必要があります。
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
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 –
現在のオブジェクトへの const
参照。これにより、EMSCRIPTEN_BINDINGS()
ブロックでバインディングを定義する class_
関数のチェーンが可能になります。
enum_
¶//prototype
template<typename EnumType>
class enum_
JavaScript にエクスポートする列挙型を登録します。これは、EMSCRIPTEN_BINDINGS()
ブロック内から呼び出され、C++98 列挙型と C++11 「列挙型クラス」の両方で動作します。詳細については、列挙型を参照してください。
enum_type
¶EnumType
(クラスの型名)の typedef。
enum_
(const char *name)¶コンストラクタ。
const char* name –
value
(const char *name, EnumType value)¶列挙値を登録します。
const char* name – 列挙値の名前。
EnumType value – 列挙値の型。
現在のオブジェクトへの参照。これにより、EMSCRIPTEN_BINDINGS()
ブロック内で複数の列挙値を連鎖させることができます。
constant
(const char *name, const ConstantType &v)¶//prototype
template<typename ConstantType>
void constant(const char* name, const ConstantType& v)
JavaScriptにエクスポートする定数を登録します。これは、EMSCRIPTEN_BINDINGS()
ブロック内で呼び出されます。
EMSCRIPTEN_BINDINGS(my_constant_example) {
constant("SOME_CONSTANT", SOME_CONSTANT);
}
const char* name – 定数の名前。
const ConstantType& v – 定数の型。これはembindで認識される任意の型にできます。