【问题标题】:How to efficiently bind C-style function (for Mono) to C++ style class methods如何有效地将 C 风格的函数(对于 Mono)绑定到 C++ 风格的类方法
【发布时间】:2023-03-31 14:01:01
【问题描述】:

我正在使用 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*相机)上的类方法。 然而,为每一个 Constructor/Getter/Setter 创建一个函数包装器(和长函数名)只是为了能够调用 C++ 端的类方法是非常乏味的。

有没有办法通过将类对象作为函数参数来调用C++函数,例如:

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

代替:

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

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

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

提前致谢

【问题讨论】:

  • std::invoke 是您要找的吗?这将允许你写std::invoke(&Foo::SetBar, myFooObject, parameter1, parameter2);
  • 是的,这正是我想要的。谢谢!

标签: c# c++ mono


【解决方案1】:

正如 Botje 所建议的,std::invoke 是我要找的。​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    相关资源
    最近更新 更多