问题描述
我正在使用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方法是非常繁琐的事情。
Foo myFooObject;
Foo::SetBar( &myFooObject,parameter1,parameter2)
代替:
Foo myFooObject;
myFooObjcect.SetBar( paramter1,parameter2);
从那时起,我可以使用一些预处理器魔术来更轻松地解决这个问题。
也许这是一个简单的答案,但是我很难找到答案!
预先感谢
解决方法
正如Botje所建议的那样,std::invoke
是我想要的。