std::optional
a la méthodevalue_if - l'inverse de value_or ou pour std :: optionnel?
template< class U > constexpr T value_or(U&& default_value) const&;
et pourtant, il n'a pas le constructeur
template< class U > optional(bool condition, const U& value);
qui suinte comme la chose en face. Sinon, vous pouvez vous attendre à avoir la méthode/named langage constructeur statique:
constexpr std::optional<T> value_if(bool condition, const T& value) {
return condition ? nullopt : std::optional(value);
}
Mes questions:
- Y at-il un problème conceptuel avec un
value_if
(dans l'une des variantes I listed)? - Est-ce que quelque chose comme ça était proposé dans la norme?
Remarque: Je ne savais pas si j'avais const T& value
ou const T&& value
.
Je ne suis pas sûr que je comprends. À quel moment un objet T vivant sera-t-il créé, si je passe par référence? Je veux dire, il y a l'argument initial que je passe à 'value_if', qui est un objet existant auquel je passe une référence; et il y a la construction dans la troisième clause de l'opérateur trinaire - mais c'est une logique à court terme, donc ça ne s'appelle pas vraiment. Ou est-ce que je manque quelque chose? – einpoklum
@einpoklum: Voir les exemples ajoutés. –
Ah, mais c'est exactement la même chose que 'my_optional.value_or (get_object (...))', qui pourrait être remplacé par 'auto v = my_optional? my_optional.value: v {} '; – einpoklum