我将如何分离这个类
How would I separate this class?
我正在学习计算机图形学和OpenGL,我用JSON清单文件从我自己的二进制格式加载模型来跟踪资产。
我现在拥有的Model
类跟踪绘制它所需的OpenGL对象,以及处理3D模型文件的处理:
class Model
{
public:
Model(const std::string &filename);
// read the manifest
// load the appropriate binary files
// finally make the OpenGL objects this class keeps track of
// ... etc, like draw()
private:
// handles for various OpenGL objects
}
我想将文件处理与OpenGL图形内容的簿记分开,因为我觉得这对单个类来说责任太大了。我该怎么做呢?
我想过创建一个ModelLoader
类,但我认为没有任何状态需要跟踪才能加载它。所以也许我应该让它成为 ModelLoader
命名空间中的一个函数。我玩了一下,但最终得到:
// ModelLoader.hpp
#include "Model.hpp"
namespace ModelLoader
{
Model load(const std::string &filename);
}
// ModelLoader.cpp
#include "ModelLoader.hpp"
Model ModelLoader::load()
{
return Model();
}
// Model.hpp
class Model;
namespace ModelLoader
{
Model load();
};
class Model
{
friend Model ModelLoader::load();
public:
// ... etc, like draw()
private:
Model(const std::string &filename); // accessible only through ModelLoader::load()
// handles for various OpenGL objects
}
Model
和ModelLoader
之间有一个循环依赖关系,我所拥有的是我能让它编译的唯一方法。但如您所见,这违背了 ModelLoader.hpp
内部声明的目的,而且它是重复的代码。我仍然不太擅长C++和面向对象设计。我应该继续我以前拥有的东西吗?如果我真的想将文件加载与簿记分开,我应该怎么做?我的尝试有什么问题?
我建议采用稍微不同的方法。 使类知道如何从流中序列化和反序列化自身。
这样,您就可以使用字符串流、文件流、网络流等。
相关文章:
- C++:如何读取分离变量,然后读取向量
- 分离一个静态常量 std::thread?
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 如何在 c++ 中将数据与文件流分离
- 为什么堆栈和堆在内存中分离得如此之多?
- 具有可分离内核的 2D 模糊卷积
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 防止编译器分离函数的指令
- 分离库的主机端和 CUDA 设备端版本
- C++将文件行分离为String和Int
- 分离类所有权和使用,生成最佳(快速)代码
- 动态空间分离C++程序中的输入
- 如何从几乎排序的链表中分离放错位置的元素?
- 检查分离的线程是否还活着?
- 真的需要在 .h 和 .cpp 文件中分离 c++ 结构吗?
- 为什么分离线程没有得到输出消息
- 将偶数和奇数随机数分离并打印出来
- 如何"stop"正在等待条件变量的分离线程?
- 有没有办法在一段时间后将流程从流出中分离出来
- 如何在模板参数中分离函数类型返回类型和参数