【发布时间】:2022-01-16 00:31:53
【问题描述】:
问题的第一部分是创建一个参数数量未知的函数(Sum),我已经完成了。它工作得很好。但是我在第二部分中遇到了困难,不同类型的参数,例如:int,float,double ...在一个函数调用中。任何我可以修复我的程序的理想???
感谢您的关注。
我想很多人不明白我的问题。
我希望我的程序也可以使用不同类型的 od 参数。
例如:
sum(3, int x, int y, double z) 或 sum(4, double x, int y, float z, double t)
cout << func(sum, 5, 1.0, 2.0, 3.0, 4.0, 5.0) << endl;正如我所料,它与 double 配合得很好。
但是
cout << func(sum, 5, 1.0, 2.0, 3, 4, 5) << endl;不行
甚至所有数字都是整数,它仍然不能像我预期的那样工作,它返回 0
cout << func(sum, 5, 1, 2, 3, 4, 5) << endl;
double func(double (*f) (const double*, int) , int num, ...) {
va_list arguments;
/* Initializing arguments to store all values after num */
va_start(arguments, num);
/* Sum all the inputs; we still rely on the function caller to tell us how
* many there are */
auto *array = new double[num];
for (int x = 0; x < num; x++) {
double el = va_arg( arguments, double );
array[x] = el;
}
va_end(arguments); // Cleans up the list
return f(array, num);
}
double sum(const double *array, int n) {
double result = 0;
for (int i = 0; i < n; ++i) {
result += array[i];
}
return result;
}
【问题讨论】:
-
如果您的目标是编写 C++ 代码,那么您将需要使用模板,顺便说一下,模板可以完成同样的事情,而不是像
va_arg这样的 C 级黑客。你知道如何在 C++ 中使用模板吗?如果没有,那么你从哪里得到这个编程任务?这种编程任务只有在介绍了 C++ 模板的基础知识之后才会给出。 -
这个编程作业的教材主题是什么?通常,在课堂上介绍特定主题或主题后给出编程作业,即在解释虚拟功能如何工作后给出涉及虚拟功能的编程作业。也许对于这个编程任务,您应该学习如何使用
std::common_type? -
主题是使用
cstdarg库编写函数,如 sum,mean... 具有不同数量的参数,然后更改函数以使用不同类型,如 int、float、double 也(不是模板 ) 比如 sum(int a, double b), sum(int a, float b, double c)... -
不,这不是编程主题。没有像这样标题的章节的 C++ 教科书。一个主题可能是虚函数、多重继承、容器、算法等……您最近在课堂上从您提到的与此编程作业相关的讲师那里学到了什么?有一个特定的模板,给定其中一种类型,生成所谓的通用类型,即 int、float -> float。这可能是预期的解决方案。也许你忘记了,如果是的话,你可以查阅你的课堂笔记。
标签: c++ function types arguments