问题
Simply, can I pass std::vector
as a template argument. Following example list usage
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;
};
I wish to pass container_types to generate final two data types. If this is not feasible, then how can I achieve the same.
回答1:
Yes, like this
#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;
}
Note that I had to wrap std::vector
with my_vector
, as std::vector
actually has several template arguments.
来源:https://stackoverflow.com/questions/22387356/partial-type-as-template-argument-c