基于可变参数递归模板实现带空终止符的空格分隔流输出函数问询
完善C++可变参数模板实现空格分隔输出加末尾空终止符
你已经搞定了单个参数的处理逻辑,只需要再添加一个处理多参数的可变参数模板重载就能实现完整功能啦!
完整代码实现
#include <ostream> // 处理单个参数:输出参数并添加末尾空终止符 template <typename T> void join(std::ostream& os, T const& arg) { os << arg << '\0'; // '\0' 和 '\000' 等价,写法更直观 } // 处理多个参数:输出当前参数+空格,递归处理剩余参数 template <typename T, typename... Args> void join(std::ostream& os, T const& arg, Args const&... args) { os << arg << ' '; join(os, args...); // 递归调用,直到只剩最后一个参数 }
代码解释
- 多参数版本会先输出当前参数,紧接着输出一个空格,然后递归调用
join处理剩下的参数; - 当递归到只剩最后一个参数时,会自动匹配单个参数的重载版本,输出参数后直接加上空终止符
'\0',完美收尾; - 空终止符用
'\0'和你原来写的'\000'是完全等价的,前者写法更简洁直观。
使用示例
#include <iostream> int main() { // 输出内容:"foo 123 3.14\0"(末尾的\0是空终止符) join(std::cout, "foo", 123, 3.14); return 0; }
内容的提问来源于stack exchange,提问作者jwm
相关产品推荐
相关产品推荐

