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

标签 c++

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

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

...

WaitForMultipleObjects( 3, {hThread1,hThread2,hThread3}, FALSE, INFINITE );

而不是这个:

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

...

WaitForMultipleObjects( 3, hThread, FALSE, INFINITE );

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

最佳答案

然后写一个包装器。

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
    );
}

现在您可以:

wait_for_multiple_objects({ handle1, handle2, handle3 });

这显然需要支持 initializer_list 的 C++11 编译器. std::vector<HANDLE>如果您希望传递一个已经存在的参数,则可能是更好的参数类型。或者更通用的迭代器/范围接口(interface),但这留给读者作为练习。

关于c++ - 如何将初始化列表作为函数参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004102/

相关文章:

c++ - 使用 Bazel 使用不同的编译器/链接器选项构建 C/C++ 依赖项

c++ - 夹角到任意范围

c++ - CMakeLists.txt 子文件夹中的 cmake find_package 相对路径

c++ - 是否可以在 Linux 中开发 DirectX 应用程序?

c++ - 将额外参数传递给 libcurl CURLOPT_READFUNCTION 回调

c++ - 使用 wxwidgets 不会在 C++ 中抛出事件

c++ - 用于 map 的 glm 重载运算符不起作用

c++ - FlannBasedMatcher 匹配器构建

c++ - 如何将 2 个元素从 head 移动到 vector 中的给定位置

c++ - 对半透明对象实现深度测试