In C++11 kann man recht komfortabel mit
std::bind Funktionen (auch Member Functions) and Funktions-Objekte binden.
Wie aber kann man eine C++ Funktion an eine eigene Virtuelle Maschine binden?
Also wenn man seine eigene Script Sprache entwickelt.
Ohne eine
Interoperabilität mit der 'Host'-Sprache wäre das ganze ja ziemlich Sinnfrei.
Bsp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// Host side
class VirtualMachine
{
public:
void Bind(const FunctionObject& function, const std::string& scriptFunctionName);
/* ... */
};
/* ... */
class Mouse
{
public:
static Mouse* Instance();
bool IsButtonDown(int buttonIndex);
};
vm.Bind(&Mouse::Instance, "Mouse.Instance");
vm.Bind(&Mouse::IsButtonDown, "Mouse.IsButtonDown");
|
|
C-/C++-Quelltext
|
1
2
3
4
5
|
// Script side
extern class Mouse {
public static Mouse Instance()
public bool IsButtonDown(int buttonIndex)
}
|
Eine Interoperabilität mit ANSI C wäre vermutlich einfacher:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
// Host side
extern "C"
{
void* Mouse_Instance() { /* ... */ }
int Mouse_IsButtonDown(void* thisPtr, int buttonIndex) { /* ... */ }
}
vm.Bind(&Mouse_Instance, "Mouse.Instance");
vm.Bind(&Mouse_IsButtonDown, "Mouse.IsButtonDown");
|