我的设计有问题。
/// 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条建议:
所有4条建议对我来说都是 Not Acceptable 。为什么?
如果有人有更好的设计或优雅的解决方案,或者可以说服我,我的建议之一就是好,请这样做。
谢谢。
最佳答案
您的层次结构已损坏,您需要重新考虑它。
如果有人以您没有想到的方式扩展ImyNode
怎么办
class IUnexpectedNode : public ImyNode {}; // note: not inheriting Node
然后调用您的
myNode::add
?IUnexpectedNode unexpected;
myNode my;
my.add(unexpected);
届时您将无法履行义务。
更新
如果您假定每个
ImyNode
最终也是一个Node
,那么最简单的履行义务的方法就是更改ImyNode::add()
的签名。class ImyNode
{
virtual void add(Node*) = 0; // This method follows the Node::add(Node*)
// signature, although the classes are unrelated.
// The intent is that each class that implements
// ImyNode also extends Node, so the two methods
// merge into one.
};
关于c++ - C++连接接口(interface)到基类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16008544/