Почему я не могу это сделать?
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