
C变参模板应用变参模板允许模板接受任意数量的参数是实现通用库和元编程的关键技术。C11引入的变参模板极大地增强了模板的表达能力。变参模板使用省略号语法声明参数包。#includetemplatevoid print(Args... args) {((std::cout args ), ...);std::cout \n;}void variadic_basic() {print(1, 2, 3);print(Hello, World, 42, 3.14);}递归展开是处理参数包的传统方法。templatevoid print_recursive(T value) {std::cout value \n;}templatevoid print_recursive(T first, Args... rest) {std::cout first ;print_recursive(rest...);}void recursive_expansion() {print_recursive(1, 2, 3, 4, 5);}折叠表达式是C17引入的简化语法。templateauto sum(Args... args) {return (args ...);}templateauto product(Args... args) {return (args * ...);}templatebool all_true(Args... args) {return (args ...);}void fold_expressions() {std::cout Sum: sum(1, 2, 3, 4, 5) \n;std::cout Product: product(2, 3, 4) \n;std::cout All true: all_true(true, true, false) \n;}sizeof...运算符获取参数包大小。templatesize_t count_args(Args... args) {return sizeof...(args);}void sizeof_operator() {std::cout Count: count_args(1, 2, 3, 4) \n;std::cout Count: count_args(a, b) \n;}变参模板可以实现完美转发。templatevoid forward_args(Args... args) {print(std::forward(args)...);}void perfect_forwarding() {int x 42;forward_args(x, 100, test);}变参模板可以实现元组。templateclass Tuple;templateclass Tuple {};templateclass Tuple : private Tuple {Head head_;public:Tuple(const Head head, const Tail... tail): Tuple(tail...), head_(head) {}Head head() { return head_; }Tuple tail() { return *this; }};变参模板可以实现类型列表操作。templatestruct TypeList {};templatestruct Length;templatestruct Length {static constexpr size_t value sizeof...(Types);};变参模板是现代C泛型编程的核心特性。