我的设计有问题。
/// Generic class. Not owned by myself
class Node
{
add(Node* v) { /* do somthing */ }
};
/// interface writtern by myself
class ImyNode
{
add(ImyNode* v) = 0;
/// More functions
};
/// Implement ImyNode, use Node for implementation of SOME functions.
class myNode:
public ImyNode,
public Node
{
add(ImyNode* v) { Node::add(v); } // Error: ImyNode is not a type of Node
};
错误当然是正确的。这并不奇怪。但我需要一个解决方案。如何解决此编译错误。
我有4个建议:
- 在函数 myNode::add() 中使用 reinterpret_cast 运算符
- 创建一个接口 INode 并让 ImyNode 扩展这个 INode
- 将 ImyNode::add(ImyNode* v) 更改为 ImyNode::add(myNode* v)
- 让 ImyNode 扩展 Node
所有 4 条建议对我来说都是不可接受的。为什么?
- 不会工作。丑陋的。馊主意
- 如果我没有 Node 怎么办?如果类层次结构比那更复杂怎么办?
- 接口不应该知道任何关于它的派生类
- 不喜欢接口扩展非接口类。即使我确实走这条路,如果没有 ImyNode CTOR,我将如何调用 Node CTOR
如果有人有更好的设计或优雅的解决方案,或者可以说服我我的建议之一是好的,请这样做。
谢谢。