如何有效地将 C 风格的函数(对于 Mono)绑定到 C++ 风格的 class 方法
How to efficiently bind C-style function (for Mono) to C++ style class methods
我正在使用 Mono 将 C# 代码绑定到 C++。在设置 Mono 域等之后,您相应地绑定函数:
C++ 端:
mono_add_internal_call("Camera::SetPerspectiveVerticalFOV", Camera_SetPerspectiveVerticalFOV);
float Camera_SetPerspectiveVerticalFOV(Camera *camera, float verticalFov)
{
camera->SetPerspectiveVerticalFOV(verticalFov);
}
C# 端:
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern void SetPerspectiveVerticalFOV_Engine(IntPtr cameraObject, float verticalFov);
现在,一切都按照我的方式进行绑定。也就是说,在 C++ 端创建一个包装器 class 以在函数参数(Camera* 相机)中的对象上调用 class 方法。
然而,为每个 Constructor/Getter/Setter 创建函数包装器(和长函数名)只是为了能够调用 C++ 端的 class 方法是非常乏味的。
有没有办法通过将 class 对象作为函数参数来调用 C++ 函数,例如:
Foo myFooObject;
Foo::SetBar( &myFooObject, parameter1, parameter2)
而不是:
Foo myFooObject;
myFooObjcect.SetBar( paramter1, parameter2);
从那时起,我可以使用一些预处理器魔法来更轻松地解决这个问题。
也许这是一个简单的答案,但我很难找到答案!
提前致谢
正如 Botje 所建议的,std::invoke
正是我要找的。
我正在使用 Mono 将 C# 代码绑定到 C++。在设置 Mono 域等之后,您相应地绑定函数:
C++ 端:
mono_add_internal_call("Camera::SetPerspectiveVerticalFOV", Camera_SetPerspectiveVerticalFOV);
float Camera_SetPerspectiveVerticalFOV(Camera *camera, float verticalFov)
{
camera->SetPerspectiveVerticalFOV(verticalFov);
}
C# 端:
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern void SetPerspectiveVerticalFOV_Engine(IntPtr cameraObject, float verticalFov);
现在,一切都按照我的方式进行绑定。也就是说,在 C++ 端创建一个包装器 class 以在函数参数(Camera* 相机)中的对象上调用 class 方法。 然而,为每个 Constructor/Getter/Setter 创建函数包装器(和长函数名)只是为了能够调用 C++ 端的 class 方法是非常乏味的。
有没有办法通过将 class 对象作为函数参数来调用 C++ 函数,例如:
Foo myFooObject;
Foo::SetBar( &myFooObject, parameter1, parameter2)
而不是:
Foo myFooObject;
myFooObjcect.SetBar( paramter1, parameter2);
从那时起,我可以使用一些预处理器魔法来更轻松地解决这个问题。
也许这是一个简单的答案,但我很难找到答案!
提前致谢
正如 Botje 所建议的,std::invoke
正是我要找的。