如何有效地将C样式函数用于Mono绑定到C ++样式类方法

问题描述

我正在使用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 ++端创建一个包装器类,以在函数参数(Camera * camera)中的对象上调用方法。 但是,为每个单独的Constructor / Getter / Setter创建一个函数包装器(以及长函数名)以仅能够调用C ++端的class方法是非常繁琐的事情。

是否可以通过将类对象作为函数参数来调用C ++函数,例如:

Foo myFooObject;
Foo::SetBar( &myFooObject,parameter1,parameter2)

代替:

Foo myFooObject;
myFooObjcect.SetBar( paramter1,parameter2);

从那时起,我可以使用一些预处理器魔术来更轻松地解决这个问题。

也许这是一个简单的答案,但是我很难找到答案!

预先感谢

解决方法

正如Botje所建议的那样,std::invoke是我想要的。