【发布时间】:2016-12-17 16:32:22
【问题描述】:
有没有办法将未知数量的 args(可以是 char 字符串或整数)传递给函数,然后将它们连接到 char 数组缓冲区?
例如,能够调用以下所有函数:
bufcat("this", 1, 3, "that");
// buffer = "this13that"
bufcat(1, "this", "that", 3, 4000000, "other");
// buffer = "1thisthat34000000other"
bufcat(1000000,2,3,4,5,6,7,8,9,10,11,12,13,"onemillionandfiftytwo");
// buffer = "10000002345678910111213onemillionandfiftytwo"
【问题讨论】:
-
试试看 va_args,这可以用 C 和 C++ 中的可变参数来完成
-
不可能按照您定义的方式进行,否则
printf和scanf不需要格式参数(当然您可以按照前面提到的函数定义的方式进行)。研究 C++ 中的运算符,它们可以用来执行此操作(可能有一个代理对象,它累积链接对象,然后可以转换为std::string),尽管它可能看起来不太干净。但是话又说回来,为此拥有一个全局缓冲区并不是我所说的干净。 -
确定至少需要一件事来定义参数的数量
-
您应该能够使用可变参数模板来做到这一点。但为什么是 char 数组 而不是
std::string? -
问题不在于参数的数量(va_arg 可以毫无问题地解决),而是参数的内容。您需要知道元素是什么类型(这就是当您的格式参数不正确时 printf/scanf 行为不端的原因)
标签: c++ arrays templates generics variadic-functions