Сколько аргументов в std :: bind (VC 11 поддерживает только 4) - PullRequest
6 голосов
/ 05 февраля 2012

Я играю с разработчиком предварительного просмотра Visual Studio 11.

Одним из недостатков, с которыми я столкнулся, является std :: bind, поддерживающий только 4 аргумента функции.

Я не могу найти ничего об этом в документе по стандартам C ++ 11. Определено ли минимальное количество аргументов или все зависит от реализации?

Ответы [ 3 ]

7 голосов
/ 06 февраля 2012

В VC11 вы можете проверить количество максимальных аргументов, используемых схемой эмуляции шаблонов вариационных переменных, установив _VARIADIC_MAX.По умолчанию 5.

См. Здесь: http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx

Если вам нужно больше аргументов (например, у вас был код, компилируемый с VC9 SP1 или VC10, который использовал 6-кортежи), естьспасательный люкВы можете определить _VARIADIC_MAX для всего проекта от 5 до 10 включительно (по умолчанию это 5).Увеличение его приведет к тому, что компилятор будет занимать больше памяти и может потребовать от вас использования параметра / Zm, чтобы зарезервировать больше места для PCH.

2 голосов
/ 05 февраля 2012

На самом деле, это является следствием того, что VC11 еще не поддерживает шаблоны с переменными числами. Однако они могут жестко кодировать больше, чем four . Библиотеки Boost делают это все время, используя шаблон для десяти аргументов (см. Например, сигналы2 внизу в каталоге деталей). Четыре аргумента - это ужасно небольшое число, чтобы остановиться на этом.

0 голосов
/ 05 февраля 2012

Это некое зависящее от реализации значение. Реализации могут просто аварийно завершить работу или сделать что-то другое, если вы превысите количество аргументов. Реальные реализации C ++ 11 здесь используют шаблоны с переменным числом аргументов (VC ++ пока не имеет этой возможности), поэтому их пределов должно быть более чем достаточно для всех.

Это один случай неопределенного поведения, превышающего пределы реализации. Ничем не отличается от того, что у вас есть файл размером 1 ТБ, который пытается подать в компилятор, и ему не хватает памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...