create_task 调用 ref class 密封构造函数给出 'create_task':未找到匹配的重载函数
create_task that calls ref class sealed constructor gives 'create_task': no matching overloaded function found
我已经创建调用 MyClass 的构造函数,My class 定义为 ref class Myclass sealed 并且此函数在 public 下定义为静态
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
您的构造函数不是异步操作,因此不能用作 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(它构造您的 class),然后将其包装在您可以使用的 WinRT IAsyncOperation<>
中。由于您的构造函数不执行任何操作,因此我不确定您为什么希望它是异步的(除非您省略了一堆昂贵的调用)。
我已经创建调用 MyClass 的构造函数,My class 定义为 ref class Myclass sealed 并且此函数在 public 下定义为静态
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
您的构造函数不是异步操作,因此不能用作 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(它构造您的 class),然后将其包装在您可以使用的 WinRT IAsyncOperation<>
中。由于您的构造函数不执行任何操作,因此我不确定您为什么希望它是异步的(除非您省略了一堆昂贵的调用)。