Я читал о std::optional<std::reference_wrapper<T>>
как о способе передачи необязательных ссылок.
Однако я не могу придумать практического примера, где я бы сделал это вместо того, чтобы просто использовать optional<T>&
.
Например, предположим, что я пишу функцию, которая должна принимать необязательный vector<int>
по ссылке.
Я мог бы сделать это:
void f(optional<reference_wrapper<vector<int>>> v) {
// ...
}
int main() {
vector<int> v = {1, 2, 3, 4};
f(make_optional<reference_wrapper<vector<int>>>(std::ref(v));
return 0;
}
Но почему бы просто не сделать это?
void f(optional<vector<int>>& v) {
// ...
}
int main() {
f(make_optional<vector<int>>>(std::initializer_list{1, 2, 3, 4}));
return 0;
}
Приведите пример, где optional<reference_wrapper<T>>
предпочтительнее optional<T>&
. Различия семанти c, и особенно способы их использования на практике, мне не ясны.