gpt4 book ai didi

c++ - 集合类型的可变长度参数列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:08 24 4
gpt4 key购买 nike

好吧,我很确定之前已经以某种方式讨论过这个问题,但我显然太笨了,找不到它。

首先:我不是在寻找 va_list 和其他宏。我正在寻找的是类似于主函数​​参数的东西。

众所周知,默认原型(prototype)是:

int main(int argc, char *argv[]);

现在,我想要我的程序有类似的东西,但不知 Prop 体怎么做。

假设我们有这个函数:

void Function(int argc, unsigned short *args[]) {
for(int i = 0; i < argc; ++i) printf("%hu ", args[i]);
}

我想要这样的函数调用:

Function(5, 1, 2, 3, 4, 5);

那行得通吗?因为我不想要 va_list 的“困惑”,也不想创建:

void AnotherFunction() {
unsigned short Args[] = { 1, 2, 3, 4, 5 };
Function(5, Args);
}

很简单,因为在那种情况下我只需要一个简单的指针。有人可以指出我正确的方向吗?非常感谢。

编辑:感谢大家的宝贵意见。我将满足于“暂时无法使用标准 C/C++,并寻找解决我的问题的不同方法。”

再次感谢您。

最佳答案

特定于 g++ 的解决方案:

const size_t MAX_ARGS = 42;

void Function(int argc, const unsigned short (&args)[MAX_ARGS])
{
}

int main()
{
Function(5, {1,2,3,4,5});
}

如果你实际上不需要argc参数,你可以写一个模板:

template<size_t N>
void Function(const unsigned short(&args)[N])
{
// use N
}

这适用于 C++03。该数组必须是常量,否则您不能像那样传递临时初始化列表。如果您需要修改函数内部的元素,则需要复制一份。

关于c++ - 集合类型的可变长度参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12771537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com