我为什么不能这样做?
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