ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

深入理解C++ 模板<六> 模板模板参数

2026/9/4 13:13:16 拓冰建站 浏览量
深入理解C++ 模板<六> 模板模板参数 模板模板参数Template Template Parameter简单说就是让模板参数本身也是一个模板。通常情况下我们传的是类型如int或常量值如10。而模板模板参数允许你传入一个类模板如std::vector或std::list然后再用你的类型去实例化它。这在你需要“容器适配”时特别有用——比如你想定义一个容器包装器把具体的容器类型vector/list/deque作为参数传进去同时把元素类型也留给用户指定。核心语法解析声明方式template typename T, template typename... class ContainerTypetypename T普通类型参数指定元素类型。template typename... class ContainerType模板模板参数表示ContainerType本身是个模板可接受任意多个类型参数。C17之前必须用class关键字不能用typenameC17及之后两者都可#include iostream #include vector #include list #include string // T: 元素类型 // ContainerType: 模板模板参数代表一个容器模板如 vector, list template typename T, template typename... class ContainerType class MyWrapper { private: ContainerTypeT storage; // 使用 T 去实例化传入的容器模板 public: // 添加元素 void add(const T value) { storage.push_back(value); } // 打印所有元素 void print() const { for (const auto val : storage) { std::cout val ; } std::cout std::endl; } }; int main() { // 1. 使用 std::vector 作为底层容器元素类型为 int MyWrapperint, std::vector vecWrapper; vecWrapper.add(10); vecWrapper.add(20); vecWrapper.add(30); std::cout Vector 中的内容: ; vecWrapper.print(); // 输出: 10 20 30 // 2. 使用 std::list 作为底层容器元素类型为 std::string MyWrapperstd::string, std::list listWrapper; listWrapper.add(Hello); listWrapper.add(World); std::cout List 中的内容: ; listWrapper.print(); // 输出: Hello World return 0; }