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

时间:2011-07-21 20:49:14

标签: c++ c++11 lazy-loading

我想知道是否像

这样的东西
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();
        }
    }
};

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

1 个答案:

答案 0 :(得分:6)

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