33 #include <boost/optional.hpp> 49 template<
typename Source,
typename Object>
54 boost::optional<Object> Object_;
56 std::function<Object (Source)> Initializer_;
57 std::function<void (Source&)> ClearSource_;
70 template<
typename Init>
72 const Init& initializer,
73 const std::function<
void (Source&)>& clear = [] (Source& src) { src = Source {}; })
75 , Initializer_ { initializer }
76 , ClearSource_ { clear }
97 ClearSource_ (Source_);
122 Object_ = Initializer_ (Source_);
123 ClearSource_ (Source_);
LazyInitializer & operator=(const Object &object)
Assigns an object to this lazy (making it evaluated) initializer and clears the source.
LazyInitializer(const Source &source, const Init &initializer, const std::function< void(Source &)> &clear=[](Source &src) { src=Source {};})
Constructs an unevaluated lazy initializer.
LazyInitializer(const Object &object)
Constructs an evaluated initializer from the object.
Object & operator->()
Indirection operator, forcing object construction.
Provides lazy initialization on first access to an object.