假设我有两个班级Foo1<T>
和Foo2<T>
。
然后,我想要创建一个函数bar
,该函数引用std::vector<Foo1<T>>
或std::vector<Foo2<T>>
,但总是返回std::vector<Foo1<T>>
:
template<class T, class Y> std::vector<Foo1<T>> bar(std::vector<Y<T>>&)
可悲的是,编译器并不喜欢<Y<T>>
位。这方面的一个方法是提供两个重载,但有没有办法我可以安排上面这样做,这是正确的吗?
答案 0 :(得分:17)
您需要template template parameter:
template<class T, template <typename> class Y>
std::vector<Foo1<T>> bar(std::vector<Y<T>>&) {}