c++ - std::optional::value_or() - 惰性参数评估

标签 c++ stl c++17 stdoptional

是否有可能以惰性方式评估 std::optional::value_or(expr) 参数,因此 expr 仅在没有的情况下计算值(value)?

如果不是,什么是合适的替代品?

最佳答案

#include <optional>

template <typename F>
struct Lazy
{
    F f;  

    operator decltype(f())() const
    {
        return f();
    }
};

template <typename F>
Lazy(F f) -> Lazy<F>;

int main()
{
    std::optional<int> o;

    int i = o.value_or(Lazy{[]{return 0;}});
}

DEMO

关于c++ - std::optional::value_or() - 惰性参数评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51695541/

相关文章:

c++ - 观察者模式 - 进一步的考虑和通用的 C++ 实现

c++ - 如何在 C++ 中使用 std::optional

c++ - 计算独特项目的更好方法

c++ - 为什么这个三元会导致打印指针?

C++ STL 映射 : insert is storing null pointers

c++ - `a ? b : c`是什么类型?

c++ - 在 CPP 中删除重叠对象

c++ - 标准库中rbegin和end函数的区别

c++ - 列表 <string> 的编译器错误

c++ - 什么是 "terse ranged-based for loops"?