デザインに問題があります。
/// 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つの提案はすべて私には受け入れられません。なんで?
- うまくいきません。醜い。悪いアイデア
- ノードを所有していない場合はどうなりますか? クラス階層がそれよりも複雑な場合はどうなりますか?
- インターフェイスは、その派生クラスについて何も認識してはなりません
- インターフェイスが非インターフェイス クラスを拡張するのは好きではありません。この道を進んだとしても、ImyNode CTOR なしで Node CTOR を呼び出すにはどうすればよいでしょうか。
誰かがより良いデザインやエレガントなソリューションを持っている場合、または私の提案の1つが良いと私に納得させることができる場合は、そうしてください.
ありがとう。