如何声明模板模板参数

7
假设我有两个类 Foo1 和 Foo2。
我想创建一个函数 bar,该函数获取指向 std::vector> 或 std::vector> 的引用,但始终返回 std::vector>:
template std::vector> bar(std::vector>&)
不幸的是,编译器不喜欢 > 部分。 解决这个问题的一种方法是提供两个重载,但是否有办法使上述内容正确?
1个回答

17
你需要使用模板模板参数:

template template parameter

template<class T, template <typename> class Y> 
std::vector<Foo1<T>> bar(std::vector<Y<T>>&) {}

谢谢。你是个天使! - P45 Imminent
2
自C++14开始,Y也可以使用typename而不仅仅是class来声明。T参数总是可以这样声明。这为语言增加了一些语法上的一致性。 - emsr
@emsr 我喜欢在template括号内专门使用class,这样可以更容易地搜索typename T::type结构。 - TemplateRex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接