2017-08-03 16 views
-1

は、だから私はそれが動作し、すべてが素晴らしいです。このPPLを頻繁に使用しているコードをリファクタリングする方法。 C++

task<shared_ptr<myObjectsResult>> task1 = create_task([this,token, stream] 
{ 
    // Here I have code that is working, but I would like to refactor it 
    // maybe even make it go after or before this surrounding task. 

    create_task(BitmapDecoder::CreateAsync(stream)).then([this, token] 
    (BitmapDecoder^ bitmapDecoder) 
    { 
     create_task(bitmapDecoder->GetSoftwareBitmapAsync()).then([this, token] 
     (SoftwareBitmap^ softwareBitmap) 
     { 
      OcrEngine^ ocrEngine = OcrEngine::TryCreateFromUserProfileLanguages(); 
      if (ocrEngine != nullptr) 
      { 
       create_task(ocrEngine->RecognizeAsync(softwareBitmap)).then([fileInfo, this, transactionPriority, token] 
       (OcrResult^ ocrResult) 
       { 
        doSomethingWithText(OcrResult->Text->Data()); 
       }); 
      } 
     }); 
    }); 
    ... 
    return runAsyncFunctionThatReturnsMyObjectResultTask(token); 
}); 

のように見える機能を持っていますが、私はここにいないコードのいくつかの他の部分にOCRロジックを移動したいが、私からそれを呼び出すのが大好きですここに。 私が試したことは、作成しています

task<OcrResult^> GetOCRTextFromStream(_In_ IRandomAccessStream^ stream) 
{ 
    create_task(BitmapDecoder::CreateAsync(stream)).then([] 
    (BitmapDecoder^ bitmapDecoder) 
    { 
     create_task(bitmapDecoder->GetSoftwareBitmapAsync()).then([] 
     (SoftwareBitmap^ softwareBitmap) 
     { 
      OcrEngine^ ocrEngine = OcrEngine::TryCreateFromUserProfileLanguages(); 
     if (ocrEngine != nullptr) 
     { 
       return create_task(ocrEngine->RecognizeAsync(softwareBitmap)); 
     } 
     else 
     { 
       OcrResult^ ocrResult = nullptr; 
       return concurrency::task_from_result(ocrResult); 
     } 
    } 
} 

これを呼び出します。この勿論

GetOCRTextFromStream(stream).then([this, token] 
(OcrResult^ ocrResult) 
{ 
    doSomethingWithText(OcrResult->Text->Data()); 
} 

は動作しませんが、あなたは私が欲しいものを得る、私はちょうどこれをリファクタリングしたい、と私はちょうど私がやりたい方法を理解することはできません、それはなんとかであれば(私はそれがあると思いますか? )

おかげですべてと申し訳ありませんが、私の質問はnooby :)

+0

を持つ2つのCREATE_TASKの前でリターンを追加する場合、これは動作するはずです。 – molbdnilo

答えて

0

である場合、これはC++/CXで、溶液はリターンを置くことです。

あなたはちょうどあなたがこれはC++/CLI(または何でもそれが今週と呼ばれています)、ないCの++で

return create_task([] 
{ 
    return create_task([] 
    { 
    ... 
    } 
} 
関連する問題