Как эффективно привязать функцию в стиле C (для Mono) к методам класса в стиле C

#c# #c #mono

#c# #c #mono

Вопрос:

Я использую 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).
Однако невероятно утомительно создавать оболочку функции (и длинные имена функций) для каждого отдельного конструктора / средства получения / установки только для того, чтобы иметь возможность вызывать метод класса на стороне C .

Есть ли способ вызвать функцию C , поместив объект класса в качестве параметра функции, например:

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

Вместо:

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

С тех пор я мог бы просто использовать некоторую магию препроцессора, чтобы решить эту проблему проще.

Возможно, это простой ответ, но я изо всех сил пытаюсь найти на него ответ!

Заранее спасибо

Комментарии:

1. Является ли std::invoke тем, что вы ищете? Это позволило бы вам написать std::invoke(amp;Foo::SetBar, myFooObject, parameter1, parameter2);

2. Да, это именно то, что я искал. Спасибо!

Ответ №1:

Как предположил Ботье, это то, std::invoke что я искал.