部分类型作为模板参数c ++

时间:2014-03-13 18:12:11

标签: c++ templates template-meta-programming

简单地说,我可以将std::vector作为模板参数传递。以下示例列表用法

tempate<typename container_t, typename value_t>
struct container_types
{
  typedef container_t<value_t> value_container_t;
  typedef container_t<pair<value_t> pair_container_t;

};

我希望传递container_types以生成最终的两种数据类型。 如果这不可行,那么我怎样才能实现同样的目标。

1 个答案:

答案 0 :(得分:1)

是的,就像这样

#include <iostream>
#include <vector>

template <template<typename T> class container_t, typename value_t>
struct container_types
{
    typedef container_t<value_t> value_container_t;
    typedef container_t<std::pair<value_t,value_t > > pair_container_t;
};

template <typename T>
using my_vector = std::vector<T>;

int main(int argc,char** argv)
{
    container_types<my_vector,int>::value_container_t buff(100);
    std::cout << buff[50] << std::endl;
}

请注意,我必须用std::vector包裹my_vector,因为std::vector实际上有几个模板参数。