Поскольку я начинаю использовать преимущества структурированных привязок C ++ 17 и, если операторы оператора init для более элегантной функции сообщают о результатах и проверяют их, я начал делать следующее, в соответствии с C ++ Core Guideline F21:
std::pair<bool, int>Foo()
{
return {true, 42}; //true means that function complete with no error and that 42 is a good value
}
void main(void)
{
if (auto [Result, Value] = Foo(); Result)
{
//Do something with the return value here
}
}
Тогда, конечно, я подумал, что было бы неплохо иметь повторно используемый шаблон для таких типов возврата, чтобы никто не дублировал часть bool пары:
template <typename T> using validated = std::pair<bool,T>;
validated<int> Foo()
{
return {true, 42};
}
void main(void)
{
if (auto [Result, Value] = Foo(); Result)
{
//Do something with the return value here
}
}
Это прекрасно работаетдля меня, но теперь мне интересно, есть ли какой-то стандартный эквивалент этого шаблона, чтобы мне не пришлось заново изобретать колесо и определять его самому.Похоже, что значение произвольного типа в сочетании с флагом достоверности было бы полезной конструкцией, но я не смог найти ничего в стандартной библиотеке.Я что-то упустил?