Container mit std::packaged_task

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

Container mit std::packaged_task

Beitrag von Niki »

Hi,

ich versuche gerade in VS 2013 eine std::list mit std::packaged_tasks zu erstellen:

Code: Alles auswählen

#include <list>
#include <future>

int main(int argc, const char * argv[])
{
    std::list<std::packaged_task<void ()>> taskList;
    std::packaged_task<void ()> task([] ()
    {
        int i = 9;
        i++;
        i--;
    });
    taskList.push_back(std::move(task));

    return 0;
}
Ist es irgendwie schlecht, oder verboten das zu tun? Ich habe schon ewig viel probiert und rumgefummelt, aber erfolglos. Und die Compiler-Fehler bringen mich auch nicht weiter (die kommen sobald die Zeile mit dem push_back drin ist).

error C2665: 'std::forward' : none of the 2 overloads could convert all the argument types
error C2512: 'std::_Promise<int>' : no appropriate default constructor available
error C2182: '_Val' : illegal use of type 'void'
error C2182: '_Val' : illegal use of type 'void'
error C2182: '_Get_value' : illegal use of type 'void'

Benutzen würde ich das gern in einem Ressourcen Manager. der auch das asynchrone Laden von Ressourcen ermöglichen soll.
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

Re: Container mit std::packaged_task

Beitrag von Niki »

Ok, packaged_task mag als Rückgabe-Typ kein void im Template-Parameter. packaged_task<int ()> funktioniert beispielsweise. Nun gut, ein extra return 0; bringt micht nicht um. Wichtiger ist, dass ich jetzt weiterkomme.

Ich kann nicht sagen, ob dies eine VC++ 2013-Einschränkung ist, oder ob es sich um eine Einschränkung handelt die vom C++ Standard vorgegeben wird. Andere im Interwebs scheinen void () jedenfalls mit Erfolg zu benutzen. Möglicherweise mit einem anderen Compiler?!

Schön, dann kann's ja jetzt weitergehen mit den ResourceManager-Erweiterungen :)
Antworten