2016-03-15 86 views
0

我正在研究一個C++ ROS項目,它包含不同的類,每個類都包含一個向量。不同類型的類

難點在於載體可以是不同的類型。例如:

class A{ 
    public 
     ..... 
    private 
     std::vector<Class_C> List 
} 
class B{ 
    public 
     ..... 
    private 
     std::vector<Class_D> List 
} 

我怎麼能實現這樣的任務?我想找到一種方法來簡化我的代碼,使用模板,繼承和其他語言功能。

+0

問題不明確 – AkaSh

+0

您打算如何處理這些清單?所有其他課程的目的是什麼? –

回答

1

因爲我不能因爲我的名氣發表評論我必須寫一個答案,但Gill Bates' answer可以解決您的問題,即使你不清楚你想完成什麼。並延長他的回答,您可以使用基於他的模板類的繼承,以減輕你的編碼和強制類型轉換成你的清單(你也需要改變你的列表能見度在這種情況下保護):

class FooInt : public A<int>{ 
    public 
     void print() { /* print List's content */ } 
... 
}; 

class FooString : public A<std::string>{ 
    public 
     void print() { /* print List's content */ } 
... 
}; 

你用你的類是這樣的:

FooInt hello; 
hello.print(); // Would print list of int 

FooString moto; 
moto.print(); // Would print list of string 

注意的是,類的名字被寫爲Foo *只是爲了幫助你瞭解自己的基礎列表將包含寫在名字的類型,這可能是你的B類繼承來自A類...

3

只需使用一個模板參數:

template <typename T> 
class A{ 
    public 
     ..... 
    private 
     std::vector<T> List; 
} 

這使得A有任何類型的vector

A<Class_C> foo; 
A<Class_D> bar; 
+0

如果我想要一個從A繼承的B類,是否可以鎖定類型?如果B類只能以「Class_C」作爲類型名稱,例如 –

+0

@ S.Perfees也許你應該重新考慮你在做什麼。 [「繼承構成」](http://stackoverflow.com/questions/49002/prefer-composition-over-inheritance) –

0

是t帽子你在找什麼?

template <typename T> 
class A { 
    public: 
     ..... 
    protected: 
     std::vector<T> List; 
}; 

class B : public A<Class_D> { 
    public: 
    ..... 
}; 

B b;