所有类型的std :: vector的部分特化

时间:2014-12-02 12:25:48

标签: c++ templates

我不确定我是否在模板化方面走得太远,但是存在以下问题:

我有一个容器类。这个类可以直接取值,也可以取值取值的矢量。我想专门针对第二种情况。

我怎么能......

  1. ...为任何类型的向量专门化类?
  2. ...在专门化的类中提取向量的参数?
  3. 代码示例:

    // 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
            }
    
    };
    

    (当然我的容器比这里显示的要复杂一点。我也可以创建容器的两个不同的非模板版本。但在考虑之后,我也很好奇我如何通过专业化来实现它。 )

1 个答案:

答案 0 :(得分:4)

你几乎就在那里,你只需要语法。

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

如果您确实想支持不同的分配器,也可以从vector中提取分配器类型。

  

我不确定我是否在模板化方面走得太远

如果您可以选择是否编写模板,通常不应该。否则,这里没有任何可疑之处。