2011-12-03 47 views
1

我有一個問題,我不確定如何在C++中處理它;指向基類以及如何確定實例的實際類型

我有三個對象,每個對象可以執行多個不同的動作。這些對象支持一個附加對象,它可以添加到它們可以執行的操作。根據添加的對象,添加將啓用不同的操作。

我該如何在C++中建模?

我想有類A,B,C,AddOn1,AddOn2。

的問題是:

如何AddOn1/2知道在運行時,它包含哪些行動(換句話說,它是如何知道什麼(類型的)反對它連接到)?

類A,B,C如何知道它具有哪種類型的附加組件?

我想這樣做

類A { ... 附加元件*插件; };

並使用該指針與加載項一起使用。但我需要將它投入到其特定的類中才能使用它的功能。

我可以看到,我可以如hasAddOn1和hasAddOn2布爾字段和基於這些設置強制轉換。然後在AddOn基類中,我可以有一個指向其父節點的指針,並詢問父節點以找出AddOn的類型。

這是否有意義?

回答

2

我有三個對象,每個對象可以執行多個不同的動作。這些對象支持一個附加對象,它可以添加到它們可以執行的操作。根據添加的對象,添加將啓用不同的操作。

爲什麼不使用繼承和模板?

struct A { 
    virtual void action_foo(); // virtual not really needed in this example 
}; 

struct B { 
    virtual void action_bar(); 
}; 

template<class base_t> 
struct AddOn1 : base_t { 
    virtual void action_baz(); 
}; 

void func(A& a) { 
    a->action_foo(); 
} 

// example of use 

A x; 
B y; 
AddOn1<A> z; // add on to A 
x.action_foo(); 
y.action_bar(); 
z.action_baz(); 
func(x); 
func(z); 
相關問題