如何将初始化列表作为函数参数传递?

Dre*_*pin 4 c++

基本上,我希望做这样的事情:

HANDLE hThread1 = CreateThread(...);
HANDLE hThread2 = CreateThread(...);
HANDLE hThread3 = CreateThread(...);

...

WaitForMultipleObjects( 3, {hThread1,hThread2,hThread3}, FALSE, INFINITE );
Run Code Online (Sandbox Code Playgroud)

而不是这个:

HANDLE hThread[3];
hThread[0] = CreateThread(...);
hThread[1] = CreateThread(...);
hThread[2] = CreateThread(...);

...

WaitForMultipleObjects( 3, hThread, FALSE, INFINITE );
Run Code Online (Sandbox Code Playgroud)

我发现的唯一解决方案是使用std::initializer_list,但显然WaitForMultipleObjects()并不接受std::initializer_list

Cat*_*lus 5

然后写一个包装器.

DWORD wait_for_multiple_objects(
    std::initializer_list<HANDLE> handles,
    bool wait_all = false, DWORD time = INFINITE
) {
    return WaitForMultipleObjects(
        handles.size(), &*handles.begin(), wait_all, time
    );
}
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

wait_for_multiple_objects({ handle1, handle2, handle3 });
Run Code Online (Sandbox Code Playgroud)

这显然需要支持的C++ 11编译器initializer_list.std::vector<HANDLE>如果你希望传递一个已经存在的类型,那么它可能是一个更好的参数类型.或者更通用的迭代器/范围界面,但这仍然是读者的练习.