将延迟加载编写为模板类是否合理?
Is it reasonable to codify lazy loading as a template class?
我想知道是否有像
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分钟内把它扔在一起,所以....)
它叫做boost::optional
。这应该提供了几乎所有必要的功能。
相关文章:
- 为什么有些延迟加载 DLL 会立即使用 FFMPEG 卸载?
- 指向临时对象的自定义迭代器(延迟加载)
- 延迟加载加密++密码.dll
- C++插件不能延迟加载dll时
- 延迟加载的 DLL 在内存中彼此相距太远
- 等待条件变量是否会加载 CPU 内核
- 延迟加载opengl32.dll失败,出现Qt5
- 使用延迟加载加载正确的库 - 返回值类型错误
- 延迟加载可以被视为RAII的一个例子吗
- 延迟加载DLL
- Visual C++-检测程序是否已加载到Visual Debugger中
- 延迟加载DLL时的函数原型
- Xcode 将 dylib 复制到具有延迟加载功能的捆绑包中
- 设计延迟加载
- 在窗口中延迟加载
- cpp 类是否动态加载
- 如何在遵守得墨忒耳定律的同时延迟加载
- 提升::几何 R*树和分页/延迟加载
- 是否有任何链接器标志告诉在打开后延迟加载动态库
- 将延迟加载编写为模板类是否合理?