【问题标题】:create_task that calls ref class sealed constructor gives 'create_task': no matching overloaded function found调用 ref 类密封构造函数的 create_task 给出“create_task”:找不到匹配的重载函数
【发布时间】:2018-01-19 21:21:09
【问题描述】:

我已经创建了调用MyClass的构造函数,我的类被定义为ref class Myclass seal并且这个函数在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

【问题讨论】:

    标签: asynchronous uwp task c++-cx


    【解决方案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&lt;&gt; 中。由于您的构造函数不做任何事情,我不确定您为什么希望它是异步的(除非您省略了一堆昂贵的调用)。

    【讨论】:

    • 您能详细说明一下吗?我的构造函数是:MyNameSpace::MyClass::MyClass() :Param1(Windows::Graphics::Imaging::BitmapSize{ 0u, 0u }), Param2(Windows::Graphics::Imaging::BitmapSize{ 0u, 0u }) { } 我应该如何处理这种类型的常量? -谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多