首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将task<T>转换为task<void>

将task<T>转换为task<void>
EN

Stack Overflow用户
提问于 2018-03-31 03:46:57
回答 1查看 111关注 0票数 3

有没有办法简化下面的代码,以避免.then调用将我的task<int>“转换”为task<void>

我不能更改MyClass::MyFunction1的函数签名,因为它是公共API的一部分。

代码语言:javascript
复制
task<void> MyClass::MyFunction1()
{
    return MyFunction2().then([](int) {});
}

task<int> MyClass::MyFunction2()
{
    // Some code here
}
EN

回答 1

Stack Overflow用户

发布于 2018-03-31 08:02:18

concurrency::task是一个模板类,因此concurrency::task<int>concurrency::task<void>是两个不同的类。其中一个的实例不能强制转换或转换为另一个。

因此,您的方法在某种程度上是正确的。但是,您并没有进行转换,您只是创建了一个新的task<void>实例,该实例将在完成后由Method2()返回的task<int>执行。这稍微隐藏了你实际想要做的事情,并且可能会使将来维护代码变得更加困难。我认为更好的方法是创建并返回一个封装Method2()并等待其完成的task<void>

代码语言:javascript
复制
concurrency::task<void> MyFunction1()
{
    return concurrency::task<void>{[]()
    {
        MyFunction2().wait();
    }};
}

这更加简单明了,特别是因为调用者接收的task<void>实际上执行MyFunction2()正在执行的任何内容。

无论哪种方式,由于类型不兼容,因此没有办法创建新的task<void>实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49580523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档