如何解决C ++中的工厂方法模式和数据抽象
我尝试在C ++中实现Factory Method Pattern,同时保持良好的抽象水平。在链接中提供的示例中,所有派生类都在同一文件中,但通常不是这种情况。
-
没有派生类的头文件: 为了保留实现细节,我没有提供派生类的头文件(源文件中的声明和定义),所以我看不到如何实现工厂方法,因为派生类不可见并且正向声明为不可能。
-
带有用于派生类的头文件: 我可以实现factory方法,但是由于必须在标头中声明私有成员和方法,因此派生类的实现细节会泄漏。
也许在情况2)中使用PImpl idom可以帮助解决问题,但是我想知道这是否正确/合理。在C ++中实现此模式的通常/最佳方法是什么?
这是我的代码:
//graphic-api.hpp
class GraphicApi {
public:
enum class Type {
//OPENGL,//DIRECTX,VULKAN
};
virtual void render() = 0;
virtual ~GraphicApi() {};
static std::unique_ptr<GraphicApi> make(const Window& window,Type type);
};
//graphic-api.cpp
//need to include headers for derived classes
std::unique_ptr<GraphicApi> GraphicApi::make(const Window& window,GraphicApi::Type type) {
switch (type) {
case GraphicApi::Type::VULKAN:
return std::make_unique<VulkanApi>(window);
default:
assert(0 && "Unsupported Graphic API");
}
return nullptr;
}
//vulkan-api.hpp
class VulkanApi : public GraphicApi {
public:
VulkanApi(const Window& window);
virtual void render() {};
private:
// lot of private members & methods related to Vulkan API (not nice to see here)
vk::UniqueInstance instance;
...
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。