#pragma once #include #include #define DG_DECLARE_STATIC_VAR_IN_CLASS(cls, name) decltype(cls::name) cls::name namespace deep_gemm { template class LazyInit { public: explicit LazyInit(std::function()> factory) : factory(std::move(factory)) {} T* operator -> () { if (ptr == nullptr) ptr = factory(); return ptr.get(); } private: std::shared_ptr ptr; std::function()> factory; }; } // namespace deep_gemm