如何将初始化列表作为函数参数传递
How to pass an initializer list as a function argument?
基本上,我希望做这样的事情:
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 });
这显然需要c++ 11编译器支持initializer_list
。如果您希望传递一个已经存在的参数,std::vector<HANDLE>
可能是一个更好的参数类型。或者更通用的迭代器/范围接口,但这留给读者作为练习。
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称