std::bind有多少个参数(VC11只支持4个)
How many arguments to std::bind (VC 11 only supports 4)
我正在玩Visual Studio 11的开发者预览版。
我偶然发现的一个缺点是std::bind只支持4个函数参数。
我在C++11标准文件中找不到任何关于这方面的内容。是否定义了最小数量的参数,或者这一切都取决于实现?
在VC11中,您可以通过设置_VARIADIC_max来增加可变模板仿真方案使用的最大参数数。默认值为5。
请参见此处:http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx
如果您需要更多的参数(例如,您使用VC9 SP1编译代码或者使用6元组的VC10),有一个逃生舱口。您可以定义_VARIADIC_MAX项目范围介于5和10之间(包括5和10)(默认值为5)。增加它将使编译器消耗更多内存,并且可能要求您使用/Zm选项为PCHes保留更多空间。
实际上,这意味着VC11还不支持可变模板。然而,他们可以硬编码超过四个。Boost库一直使用最多10个参数的样板(例如,在details目录中检查signals2)来完成这项工作。四个论点是一个非常小的数字。
它是一些依赖于实现的值。如果超过了参数的数量,实现可能会崩溃或做一些其他愚蠢的事情。实际的C++11实现在这里使用可变模板(VC++还没有这个功能),所以它们的限制对每个人来说都绰绰有余。
这是未定义行为的一种情况,超出了实现限制。这与你有一个1TB的文件试图输入编译器,但内存不足没有什么不同。
相关文章:
- 编译时未启用intel oneApi CUDA支持
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么istream不支持右值提取
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 扩展光电二极管探测器以支持多个传感器
- MSVC是否支持C++11样式的属性而不是__declspec
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 哪个C++规范开始支持 std::vector
- 如何检测VS C++编译器是否支持C++11?
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- Casablanca/cpprestsdk listener.support接受函数,但不支持方法
- 将 IPv6 支持添加到雨量计
- 为什么C++不支持对未初始化变量进行智能分析?
- LMDB 是否支持随机读取?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 在 Ubuntu 18.04 上编译 GLSL 着色器时"不支持 GLSL 3.30"?
- std::bind有多少个参数(VC11只支持4个)