Wie übergeben Sie eine Initialisierungsliste als Funktionsargument?
Im Grunde bin ich auf der Suche etwas wie das hier tun:
HANDLE hThread1 = CreateThread(...);
HANDLE hThread2 = CreateThread(...);
HANDLE hThread3 = CreateThread(...);
...
WaitForMultipleObjects( 3, {hThread1,hThread2,hThread3}, FALSE, INFINITE );
stattdessen:
HANDLE hThread[3];
hThread[0] = CreateThread(...);
hThread[1] = CreateThread(...);
hThread[2] = CreateThread(...);
...
WaitForMultipleObjects( 3, hThread, FALSE, INFINITE );
Die einzige Lösung, die ich gefunden habe, ist mit std::initializer_list
, aber offensichtlich WaitForMultipleObjects()
nicht nicht akzeptieren, eine std::initializer_list
- Umschreiben
WaitForMultipleObjects
dann. Während Sie gerade dabei sind, könnte es eine alternative zu verwenden variadically Vorlagen-Funktion statt. WaitForMultipleObjects
ist ein WinAPI-Aufruf.- Ah, das erklärt es. Ein wrapper in den Sinn kommt, dann.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie ein wrapper, dann.
Können Sie jetzt tun:
Dies erfordert natürlich C++11-compiler, unterstützt
initializer_list
.std::vector<HANDLE>
könnte eine bessere Typ für das argument, wenn Sie erwarten, dass pass eine bereits vorhandene. Oder eine mehr generische iterator - /range-interface, aber das bleibt als eine übung für den Leser.initializer_list
als argument direkt? Gibt es einen Grund dies nicht zu tun, oder ist das einfach nur persönliche Vorliebe?