将延迟加载编码为模板类是否合理?

Bil*_*eal 2 c++ lazy-loading c++11

我想知道是否有类似的东西

template <typename T>
class LazyLoaded
{
    mutable char mem[sizeof T]; //First item in the class to keep alignment issues at bay
    const std::function<void (T&)> initializer;
    mutable bool loaded;
public:
    LazyLoaded() : loaded(false)
    {
        initializer = [] (T&) {};
    }
    LazyLoaded(const std::function<void (T&)>& init) : initializer(init), loaded(false)
    {
    }
    T& Get()
    {
        if (!loaded)
        {
            new (static_cast<void *>(&mem)) T();
            initializer(*static_cast<T*>(&mem));
            loaded = true;
        }
        return *static_cast<T*>(&mem);
    }
    ~LazyLoaded()
    {
        if (loaded)
        {
            static_cast<T*>(&mem)->~T();
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

这是可能的还是有意义的.(我认为这段代码存在问题,但是,嘿,我在10分钟内把它扔了,所以....)

Pup*_*ppy 6

它被称为boost::optional.这应该提供几乎所有必要的功能.