Однострочный вызов std::optional::emplace, только если он не имеет значенияC++

Программы на C++. Форум разработчиков
Anonymous
Однострочный вызов std::optional::emplace, только если он не имеет значения

Сообщение Anonymous »

По аналогии с созданием экземпляра в std::map при вызове оператора[] я хотел бы разместить (прямо в выражении) в std::optional только в том случае, если has_value() имеет значение false. Другими словами, я хотел бы выделить этот код в одну строку:

Код: Выделить всё

std::vector data;
//...
if(condition)
{
if(!data[42].has_value()) data[42].emplace();
data[42].value()[3].push_back("foo");
}
Что-то вроде:

Код: Выделить всё

if(condition)
data[42].value_or_emplace()[3].push_back("foo");
Я знаю, что могу создать свой собственный инструмент, подобный этому:

Код: Выделить всё

template 
T& value_or_emplace(std::optional& o)
{
return (o.has_value() ? o.value() : o.emplace());
}

if(condition)
value_or_emplace(data[42])[3].push_back("foo");
Но я ожидаю чего-то, что я пропустил в стандартной библиотеке.

Подробнее здесь: https://stackoverflow.com/questions/798 ... s-no-value

Вернуться в «C++»