将C ++函数包装在托管System :: Func <t>()对象中

时间:2018-09-04 11:30:32

标签: c++ c++-cli clr

我为什么不能这样做?

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

0 个答案:

没有答案