简体   繁体   English

如何有效地将 C 风格的函数(对于 Mono)绑定到 C++ 风格的类方法

[英]How to efficiently bind C-style function (for Mono) to C++ style class methods

I'm using Mono to bind C# code to C++.我正在使用 Mono 将 C# 代码绑定到 C++。 After setting up Mono domain etc. you bind functions accordingly:设置 Mono 域等后,您相应地绑定函数:

C++ side: C++方面:

mono_add_internal_call("Camera::SetPerspectiveVerticalFOV", Camera_SetPerspectiveVerticalFOV);

float Camera_SetPerspectiveVerticalFOV(Camera *camera, float verticalFov)
{
    camera->SetPerspectiveVerticalFOV(verticalFov);
}

C# side: C#方面:

[MethodImpl(MethodImplOptions.InternalCall)]
public static extern void SetPerspectiveVerticalFOV_Engine(IntPtr cameraObject, float verticalFov);

Now, it is all working to bind the way I'm doing.现在,一切都在努力绑定我正在做的事情。 That is, creating a wrapper class on the C++ side to call a class method on the object in the function parameters (Camera* camera).即在C++端创建一个包装类,在函数参数(Camera*camera)中调用对象上的类方法。 However, it is incredibly tedious to create a function wrapper (and long function names) for every single Constructor/Getter/Setter just to be able to call the C++-side's class method.然而,为每个单独的构造函数/Getter/Setter 创建一个函数包装器(和长函数名)只是为了能够调用 C++ 端的类方法是非常乏味的。

Is there a way to call a C++ function by putting the class object as a function parameter such as:有没有办法通过将类对象作为函数参数来调用 C++ 函数,例如:

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

Instead of:代替:

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

Since then I could just use some preprocessor magic to solve this easier.从那时起,我可以使用一些预处理器魔法来更轻松地解决这个问题。

Perhaps it's a simple answer, but I struggle to find an answer to it!也许这是一个简单的答案,但我很难找到答案!

Thanks in advance提前致谢

正如 Botje 建议的那样, std::invoke是我正在寻找的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM