采用数组类型的variadic函数
Variadic function that takes array types
是否有任何方法可以编写一个属于数组类型的变异函数?
void compare(int count ...) {
double[2] condition;
va_list vl;
va_start(vl, count);
for (int i = 0; i < count; i++){
condition = va_arg(vl, double[2]);
// do something with condition
}
va_end(vl);
}
我尝试在C 中进行,但我的程序说double[2]
类型是不可分配的。
是否有解决方案?
固定数组衰减到第一个元素的指针中。
数组始终通过指针传递给C样式变量参数,例如:
void compare(int count, ...)
{
double *condition;
va_list vl;
va_start(vl, count);
for (int i = 0; i < count; ++i)
{
condition = va_arg(vl, double*);
// do something with condition up to 2 elements
}
va_end(vl);
}
int main()
{
double arr1[2] = {1, 2};
double arr2[2] = {3, 4};
double arr3[2] = {5, 6};
compare(3, arr1, arr2, arr3);
return 0;
}
如果您需要知道每个传递数组的长度,则必须使用其他variadic参数传递该信息,例如:
void compare(int count, ...)
{
double *condition;
int len;
va_list vl;
va_start(vl, count);
for (int i = 0; i < count; ++i)
{
len = va_arg(vl, int);
condition = va_arg(vl, double*);
// do something with condition, up to len elements
}
va_end(vl);
}
int main()
{
double arr1[1] = {1};
double arr2[5] = {2, 3, 4, 5, 6};
double arr3[2] = {7, 8};
compare(3, 1, arr1, 5, arr2, 2, arr3);
return 0;
}
如果您使用的是C 11或更高版本,则应使用C 样式variadic模板而不是C样式variadic参数,例如:
template <size_t N>
void doSomething(double (&condition)[N])
{
// do something with condition, up to N elements
}
template <size_t N>
void compare(double (&arr)[N])
{
doSomething(arr);
}
template <size_t N, typename... Args>
void compare(double (&arr)[N], Args&... args)
{
doSomething(arr);
compare(args...);
}
int main()
{
double arr1[1] = {1};
double arr2[5] = {2, 3, 4, 5, 6};
double arr3[2] = {7, 8};
compare(arr1, arr2, arr3);
return 0;
}
实时演示
相关文章:
- 限制variadic模板类中的构造函数访问
- variadic函数模板:基于n编译时值在运行时间自动n输入
- variadic函数和折叠表达:试图在Visual Studio 2017中编译时致命误差
- 将variadic函数作为参数的函数
- 类型检测:使用variadic参数正确实现计算平均值的函数
- 在variadic函数中调用SNPRINTF和VSNPRINTF
- 如何访问variadic模板函数中的参数
- 示例自定义共享_ptr-我如何传递构造函数参数 - 我在此处使用variadic模板
- C 11和类构造函数中的variadic模板
- 如何使用variadic模板参数使模板函数调用
- VS2015上的Variadic模板中找不到过载的成员函数
- variadic函数模板的参数被作为模板非类型传递
- 空包的函数variadic模板包扩展在Clang 和G 中给出了不同的结果
- 采用数组类型的variadic函数
- 如何使用std:字符串参数迭代variadic函数
- 如何在不使用模板的情况下将variadic函数与字符串一起使用
- 从variadic函数返回格式化字符串
- 如果使用va_list将args从一个variadic函数传递给另一个函数,那么如何调用va_start(没有错误)
- variadic函数-如何确保参数正确传递
- Variadic函数在VC2010中失败,并在gcc中崩溃