Обернуть функцию C ++ в управляемый объект System :: Func <T>() - PullRequest
0 голосов
/ 04 сентября 2018

Почему я не могу это сделать?

template <typename T, typename... Params>
using Func = T(*)(Params...);

Func<int> myIntFunc([](){ return 0; }); // this is ok

auto managedFunc = gcnew System::Func<int>(myIntFunc); // not ok

Компилятор жалуется на 'TRet (__cdecl * __cdecl myIntFunc)(void)': the specified function does not match the delegate type 'int (void)'.

Несмотря на то, что конструктор System::Func<int>() принимает параметр int(*)(), который точно соответствует моему Func<int>, он не будет принимать ничего, кроме обычной функции. Э.Г.

int myNormalFunction() { return 0; }
auto managedFunc = gcnew System::Func<int>(myNormalFunction); // this is ok
...