#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
что я искал.