Как я могу предоставить параметр по умолчанию, не повторяя предыдущие?

Я искал много ресурсов, и в примерах, которые они предоставляют, это выглядит так:

void bar(int a = 4, char b = 'A')
{
}

В соответствии с этот ресурс это можно назвать так:

bar(b : 'Z');

но это дает мне ошибку identifier "b" is undefined,
Я использую Visual Studio 2015 Update 3 Enterprise.

Любые предложения, как указать только второй параметр?

-2

Решение

Документ, на который вы ссылаетесь — это просто предложение¹. Механизм, который вы пытаетесь использовать, (в настоящее время) не является частью C ++, как определено в стандартах. Таким образом, вы не можете ожидать, что компиляторы его реализуют.

В настоящее время нет других стандартных обходных путей. Если вы хотите установить какой-либо параметр, вам также необходимо указать все параметры, которые предшествуют ему, в объявлении функции.

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


Might Это может быть языковой проблемой: «предложение» — это то, что кто-то говорит, что это хорошо, а не состояние.

7

Другие решения

Одним из возможных решений может быть использование 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 Выражение использует аргумент по умолчанию из объявления функции, но, по крайней мере, позволяет указать только один из аргументов.

0

По вопросам рекламы [email protected]