我正在开发一个 3D 引擎,假设我有以下接口类:
class IA {
public:
virtual ~IA() {}
virtual void doSomething() =0;
};
class IB {
public:
virtual ~IB() {}
virtual void bindA( IA* ) =0;
};
如果您想获取“IA”或“IB”类型的对象,您必须从依赖于正在使用的后端 API(例如 OpenGL)的工厂获取它们。函数 IB::bindA(IA*) 需要从 IA 的实现中访问数据,并实现它对static_cast
实现类的操作,然后直接访问它的元素。
我想知道您对 的这种特殊用途有何看法static_cast
,您认为这是不好的设计吗?或者你认为没关系?
无论使用什么后端 API,引擎都必须提供相同的接口,所以我不认为我可以使用虚拟函数来实现这一点,因为我事先无法从 IA 知道 IB 需要什么。
感谢:D
编辑
事情是引擎有以下两个类:
class IHardwareBuffer {
public:
virtual ~IHardwareBuffer() {}
virtual void allocate( .... ) =0;
virtual void upload( .... ) =0;
};
和
class IMesh {
public:
virtual ~IMesh() {}
virtual bindBuffer( IHardwareBuffer* ) =0;
...
};
我“可以”将 IMesh 和 IHardwareBuffer 类合并在一起,但这没有多大意义,因为 HardwareBuffer 只是其中包含顶点数据的一块“哑”内存,而 Mesh 是一个或两个 HardwareBuffers 周围的其他数据它们,如顶点格式、材质等。让它们成为单独的类允许客户端代码让多个网格共享一个公共的 HardwareBuffer 和类似的东西。