我已创建调用MyClass的构造函数,我的类被定义为ref类Myclass已密封,此函数在public下被定义为static
IAsyncOperation<MyClass^>^ MyNameSpace::MyClass::CreateAsync()
{
return create_task(MyClass()).then([](MyClass^ objectx)
{
return ref new MyClass();
//return std::make_shared<MyClass>();
});
}
这给了我一堆错误,如:
Error C2672 'Concurrency::details::declval': no matching overloaded function found
Error C2770 invalid explicit template argument(s) for '_Ty &&Concurrency::details::declval(void)'
Error C2672 'Concurrency::details::_FilterValidTaskType': no matching overloaded function found
Error C2672 'create_task': no matching overloaded function found
答案 0 :(得分:1)
您的构造函数不是异步操作,因此不能用作create_task
的参数。如果需要很长时间并且您想将构造函数作为任务运行,请改用create_async
。
create_async
takes a function-like object (eg a lambda) and runs it as a task
从上面的示例中:
IAsyncOperation<MyClass^>^ MyNameSpace::MyClass::CreateAsync()
{
return concurrency::create_async([]
{
return ref new MyClass();
});
}
这将启动一个任务来运行lambda(构造你的类),然后将它包装在你可以使用的WinRT IAsyncOperation<>
中。由于你的构造函数没有做任何事情,我不确定为什么你希望它是异步的(除非你省略了一堆昂贵的调用)。