locked
请教:create_task(......).then(......)中,关于lambada表达式的捕获列表和参数列表的两处疑问 RRS feed

  • 问题

  • 你好,我在学习Windows Phone编程的过程中看到一段这样的代码,对其中lambada表达式的功能不是十分理解。代码简化如下:

    create_task(DeviceInformation::FindAllAsync(DeviceClass::VideoCapture)).then([this](task<DeviceInformationCollection^> findTask){                                                                  

    m_devInfoCollection = findTask.get();                                                           

    ......;

    create_task(mc->InitializeAsync(settings)).then([this](task<void> initTask){initTask.get();......;});

    })

    1、经查看,在这段代码中,外层create_task(......).then(......)的lambada函数体内,this从始至终都没有出现过(包括省略部分),这里在捕获列表中捕获this是否并非必须的,如果是必须的,那它的作用是什么?

    2、在lambada的参数列表中,有一个task<DeviceInformationCollection^>的形参findTask,看上去传递给findTask的是之前create_task(DeviceInformation::FindAllAsync(DeviceClass::VideoCapture)的结果,也就是说在create_task(......).then(......)中这样写总可以得到之前create_task(......)的结果,是这样吗?

    3、内层斜体的create_task(......).then(......),其lambada函数体内出现了一句initTask.get(),但是没有没有赋给任何变量,看上去没有任何作用,那是否并非必须的,如果是必须的,那它的作用是什么?

    非常感谢!




    • 已编辑 神山 2015年1月6日 8:45
    2015年1月6日 8:32

答案

  • 我找了非常久,也许是方法不对,查到的相关资料很少。

    1.隐约觉得这里的this是不能去掉的,作用好像是在lambda内获得类内变量,也许2的实现要靠它?

    3.我把initTask.get()去掉了程序功能也还是正常的,目前我猜这句initTask.get()是没什么用。

    • 已标记为答案 神山 2015年11月17日 13:01
    2015年1月7日 8:16

全部回复

  • 1. 这个应该是C++中的this指针,指向对象本身

    2. 可以这么理解

    3. 这个貌似是为了初始化Task的作用,各种类似的的实现都是需要先初始化的

    2015年1月7日 6:01
  • 我找了非常久,也许是方法不对,查到的相关资料很少。

    1.隐约觉得这里的this是不能去掉的,作用好像是在lambda内获得类内变量,也许2的实现要靠它?

    3.我把initTask.get()去掉了程序功能也还是正常的,目前我猜这句initTask.get()是没什么用。

    • 已标记为答案 神山 2015年11月17日 13:01
    2015年1月7日 8:16