¿Cómo pasar una lista de inicializadores como argumento de función?

Básicamente, estoy buscando hacer algo como esto:

HANDLE hThread1 = CreateThread(...); HANDLE hThread2 = CreateThread(...); HANDLE hThread3 = CreateThread(...); ... WaitForMultipleObjects( 3, {hThread1,hThread2,hThread3}, FALSE, INFINITE ); 

en lugar de esto:

 HANDLE hThread[3]; hThread[0] = CreateThread(...); hThread[1] = CreateThread(...); hThread[2] = CreateThread(...); ... WaitForMultipleObjects( 3, hThread, FALSE, INFINITE ); 

La única solución que he encontrado es usar std::initializer_list , pero obviamente WaitForMultipleObjects() no acepta una std::initializer_list

Escribe una envoltura, entonces.

 DWORD wait_for_multiple_objects( std::initializer_list handles, bool wait_all = false, DWORD time = INFINITE ) { return WaitForMultipleObjects( handles.size(), &*handles.begin(), wait_all, time ); } 

Ahora puedes hacer:

 wait_for_multiple_objects({ handle1, handle2, handle3 }); 

Obviamente, esto requiere un comstackdor de C ++ 11 que admita initializer_list . std::vector podría ser un mejor tipo para el argumento si espera pasar uno ya existente. O una interfaz de rango / iterador más genérica, pero eso queda como un ejercicio para el lector.