2012-02-05 51 views
5

我与Visual Studio的开发者预览播放11多少个参数为std ::绑定(VC 11只支持4)

其中的不足之处,我偶然发现的是性病::绑定仅支持4个函数参数。

我在C++ 11标准文件中找不到任何关于此的内容。是否定义了最少数量的参数,还是所有实现都依赖于?

回答

0

这是一些实现相关的值。如果你超过了参数的数量,实现可能会崩溃或者做其他愚蠢的事情。实际的C++ 11实现在这里使用可变参数模板(VC++还没有这个功能),所以它们的限制对每个人来说应该足够了。

这是一种未定义的行为,超出了实施限制。没有什么比你有一个1TB文件试图进入编译器并且内存不足。

+0

'std :: bind'是可变参数,'tr1 :: bind'是实现定义的参数,不是?这个名字看起来不对。 – spraff 2012-02-06 18:45:25

+0

@spraff模板参数的数量和函数参数的数量都受特定实现限制的约束。 – 2012-02-06 22:28:46

2

实际上,这是VC11不支持可变模板的含义。然而,他们可能会比四个更难编码。 Boost库一直在使用样板,最多可以输入10个参数(例如,在细节目录中检查信号2)。四个论点是一个可怕的小数目。

7

在VC11中,您可以通过设置_VARIADIC_MAX来调整variadiac模板仿真方案所使用的最大参数个数。默认值是5

在这里看到: http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx

如果你需要更多的参数(例如你有代码VC9 SP1 或VC10所用6元组编译),有一个逃生舱口。您可以在项目范围内定义 _VARIADIC_MAX,范围介于5和10之间(默认为5)。增加它会使编译器消耗更多的内存,并且可能需要您使用/ Zm选项为PCHes预留更多空间。

相关问题