获取数字数组(未知类型)的函数,并在每个单元格中创建另一个累积数字和数组,只要总和为正数。 如何为任何类型的变量执行此功能? (INT,双,长,短,浮动..)
答案 0 :(得分:1)
为简单起见,我展示的功能只是添加两个数字。我假设您在编写对数组进行操作的函数时不会遇到问题。
使用C ++,你可以使用这样的模板(只是在这里展示它来演示应该实现的目标):
caption
这将为所需的任何类型创建一个真实的动作,所以这里将从该模板创建一个函数处理#include <iostream>
using namespace std;
template<typename T> T sum(T a, T b)
{
return a + b;
}
int main(void)
{
long a = 5;
long b = 37;
long c = sum(a, b);
cout << c << endl;
}
。
您可以使用通用选择在C中实现类似的“呼叫舒适度”,但仍然要求您提供应处理的任何类型的实际函数,如下所示:
long
这仅使用#include <stdio.h>
static int sum__int(int a, int b)
{
return a + b;
}
static long sum__long(long a, long b)
{
return a + b;
}
static double sum__double(double a, double b)
{
return a + b;
}
#define sum(a, b) _Generic((a), \
int: sum__int, \
long: sum__long, \
double: sum__double \
)((a), (b))
int main(void)
{
long a = 5;
long b = 37;
long c = sum(a, b);
printf("%ld\n", c);
}
,其他功能在这个小例子中未使用。如果这让你烦恼,那么这就是C ++更适合这项工作的例子之一。
你应该注意到这个答案没有显示泛型函数 (这是我从你理解你想要的问题的方式)。 C中没有这样的概念。有为每种数据类型提供一个函数。即使在介绍性的C ++示例中,每种数据类型也会有一个函数,C ++模板只是根据需要管理创建这些函数。如果您需要真正的泛型函数,则必须选择完全不同的语言(例如Java或C#)。