2017-08-11 67 views
0

我创建了调用MyClass的构造函数,我的类被定义为ref类Myclass密封并且此函数被定义为publiccreate_task调用ref类的密封构造函数给出'create_task':没有匹配的重载函数找到

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

你的构造不是一个异步操作因此不能用作参数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(); 
    }); 
} 

这将加速旋转运行拉姆达(它构造你的类)的计划任务,然后把它包装在WinRT中IAsyncOperation<>,您可以使用。因为你的构造并不做任何事情,我不知道为什么你希望它是异步的,但(除非你省去一堆昂贵的电话)。

+0

请你解释一下? 我的构造函数是: '了myNameSpace :: MyClass的MyClass的::() \t:参数1(视窗:图形::成像:: BitmapSize {0U,0U}), \t参数2(视窗:图形::成像:: BitmapSize {0U,0U}) { }' 我应如何进行这种类型的常量呢? -Thanks –

相关问题