有时我们希望将模板类型传递给模板而不固定其值。这就是为模板模板参数创建的。非常简单的模板模板参数示例:
template <class T> struct Tag1 { }; template <class T> struct Tag2 { }; template <template <class> class Tag> struct IntTag { typedef Tag<int> type; }; int main() { IntTag<Tag1>::type t; }
#include <vector> #include <iostream> template <class T, template <class...> class C, class U> C<T> cast_all(const C<U> &c) { C<T> result(c.begin(), c.end()); return result; } int main() { std::vector<float> vf = {1.2, 2.6, 3.7}; auto vi = cast_all<int>(vf); for(auto &&i: vi) { std::cout << i << std::endl; } }