2014-12-02 68 views
1

我不知道我是否會與templateization太遠的載體,但以下問題:性病偏特::各類

我有某種容器類的。這個類可以直接取值,也可以取值爲向量。我想專門針對第二種情況。

我怎麼能......

  1. ...專門用於任何類型的載體類?
  2. ...提取專業類中的矢量參數?

代碼例如:。

// GENERAL CASE with vector of type T 
template <class T> 
class Container 
{ 

     std::vector<T> container; 

     void set(T val, int idx){ 
      this->container[idx] = val; 
     } 

}; 

// SPECIAL CASE with vector of vectors 
template <> 
class Container<std::vector<all types allowed>> 
{ 
     std::vector<The_type_of_vector> container; 

     void set(The_type_of_vector val, int idx1, int idx2){ 
      this->container[idx1][idx2] = val; // set element idx2 in vector idx1 
     } 

}; 

(當然我的容器是一個有點比這裏顯示更復雜的我還可以創建容器的兩個不同的非模板版本,但經過考慮之後,我也很好奇我怎樣才能做到這一點)

回答

4

你快到了,你需要的只是語法。

// SPECIAL CASE with vector of vectors 
template < typename element_type > 
class Container<std::vector<element_type>> 

你也可以從vector提取分配器類型,如果你真的想支持不同的分配器。

我不知道我是否走得太遠與templateization

如果你寫一個模板或不之間進行選擇,通常你不應該。否則,這裏什麼都不是可疑的。

+0

它有效,但對我來說這似乎很神奇,因爲我沒有在原始/常規模板定義中定義'element_type'。 – Michael 2014-12-02 12:45:06