我正在编写一个包含 30 多个纯虚拟方法的大型抽象基类*。
在实现类中查找要在基类中实现的所有函数有点乏味,主要是因为 MSVC++ 不会告诉您您未能实现哪个函数并出现编译器错误“无法构造抽象类” "
所以,我想知道我的大抽象基类是不是一个坏主意,或者我应该将它分成几个接口(interface),还是有一个编译器警告我可以激活它会告诉我我没有提供哪个方法实现...或者这只是抽象类编码的一部分,我应该习惯它。
<子> *它的作用是在几个不同的渲染子系统之间提供一层通用功能。
最佳答案
这个问题没有明显的正确答案。决定是否将基类分解为多个抽象基类可能应该是根据基类逻辑上是否代表几个不同的概念来做出决定,而不是根据糟糕的编译器错误消息。如果您这样做的唯一原因是编译器错误消息,您可能需要检查并查看是否可以升级编译器,或者是否有其他原因需要这样做。大多数现代编译器应该提供关于此的非常好的、详细的错误。
如果您的设计表明您实际上可能想要多个不同的类来实现基类的一小部分,那么将接口(interface)拆分成多个部分可能是个好主意。如果您希望这样做,将接口(interface)分开可能是有利的。但是,您会发现这增加了一些复杂性。例如,如果你有一个接口(interface)类型的指针指向一个实现多个接口(interface)的对象,你可能必须进行某种交叉转换以获得正确的类型,或者你可能必须引入一个新的抽象类来表示继承的东西来自所有不同的接口(interface)类型。接口(interface)类的多重继承也可能导致一些名称冲突,但如果接口(interface)设计正确,这通常不是问题。
简而言之,出于编译器错误的原因,我强烈建议不要这样做,但如果您认为这是一个好的设计决策,那么一定要去做。如今,编译器已经足够好了,您很少(但并非永远)不需要围绕它们构建您的设计。
关于c++ - 大型抽象基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781917/