Я искал много ресурсов, и в примерах, которые они предоставляют, это выглядит так:
void bar(int a = 4, char b = 'A')
{
}
В соответствии с этот ресурс это можно назвать так:
bar(b : 'Z');
но это дает мне ошибку identifier "b" is undefined
,
Я использую Visual Studio 2015 Update 3 Enterprise.
Любые предложения, как указать только второй параметр?
Документ, на который вы ссылаетесь — это просто предложение¹. Механизм, который вы пытаетесь использовать, (в настоящее время) не является частью C ++, как определено в стандартах. Таким образом, вы не можете ожидать, что компиляторы его реализуют.
В настоящее время нет других стандартных обходных путей. Если вы хотите установить какой-либо параметр, вам также необходимо указать все параметры, которые предшествуют ему, в объявлении функции.
Вы можете использовать что-то вроде Параметр повышения или реализовать что-то подобное самостоятельно, чтобы эмулировать функцию с помощью пользовательского кода. Вопрос о том, является ли это хорошей идеей, подлежит обсуждению, она не слишком распространена и, следовательно, может сбивать с толку других программистов.
Might Это может быть языковой проблемой: «предложение» — это то, что кто-то говорит, что это хорошо, а не состояние.
Одним из возможных решений может быть использование std::bind
с заполнителями, определенными в этом пространстве имен. Например:
void bar(int a = 4, char b = 'A') {
}
using namespace std::placeholders;
auto f = std::bind(bar, 2, _2);
f('Z'); // equivalent to bar(2, 'Z');
Как указано в другом ответе, нет способа получить std::bind
Выражение использует аргумент по умолчанию из объявления функции, но, по крайней мере, позволяет указать только один из аргументов.