我想知道是否可以使用typedef' d容器作为模板参数。我正在尝试以下内容:
template<typename T>
using containerT = std::vector<T>;
template <template<class T, class = std::allocator<T> > class container_type = containerT >
struct nodeData {
container_type<int> param;
};
int main()
{
nodeData<> nd;
}
这导致GCC 4.8的编译错误:
需要一个类型为&#39;模板类的模板 container_type&#39;,使用containerT =得到模板 的std ::矢量&lt; T&gt;&#39;
有人知道这样做的方法吗?
由于
答案 0 :(得分:3)
containerT
只有一个模板参数,因此模板模板参数必须匹配:
template <template<class> class container_type = containerT >
但是,我怀疑你希望能够将标准容器作为模板参数,所以你想要这样:
template<class T, class Allocator = std::allocator<T>>
using containerT = std::vector<T, Allocator>;
现在,您可以使用containerT
作为您在问题中提供的函数模板的模板参数。
答案 1 :(得分:0)
您可以将模板包装在一个类型中,从而延迟其瞬时。这使得模板在元编程世界中成为一流的公民:
template<template<typename...> class T>
struct wrapper
{
template<typename... ARGS>
using instance = T<ARGS...>;
};
template<typename WRAPPER , typename... ARGS>
using instance = typename WRAPPER::template instance<ARGS...>;
现在您可以将包装器用作类型可选模板参数:
using container_type = wrapper<std::vector>;
template <typename CONTAINER = container_type>
struct nodeData {
instance<CONTAINER,int> param;
};
现在您的用例完美无缺:
int main()
{
nodeData<> node;
}