1#ifndef FREE_TENSOR_LAZY_H
2#define FREE_TENSOR_LAZY_H
12template <
typename T>
class Lazy {
14 std::optional<T> container_;
15 std::function<T()> delayedInit_;
16 std::once_flag onceFlag_;
23 std::unique_ptr<LazyData> data_ = std::make_unique<LazyData>();
27 std::call_once(data_->onceFlag_,
28 [&] { data_->container_ = data_->delayedInit_(); });
29 return data_->container_.value();
34 template <
typename F>
Lazy(F delayedInit) {
35 data_->delayedInit_ = delayedInit;
61#define LAZY(expr) (Lazy([&]() { return (expr); }))
const T * operator->()
Definition: lazy.h:32
const T & operator*()
Definition: lazy.h:26
Lazy(const Lazy &)=delete
Lazy(F delayedInit)
Definition: lazy.h:34
Lazy & operator=(const Lazy &)=delete
Definition: allocator.h:9