集类型的可变长度参数列表

ATa*_*lor 5 c c++ arguments function

好吧,我很确定以前已经以某种方式讨论过这个问题,但我发现它显然太愚蠢了.

第一:我不是在寻找va_list和其他宏.我正在寻找的是主要功能参数.

默认原型,众所周知的是:

int main(int argc, char *argv[]);
Run Code Online (Sandbox Code Playgroud)

现在,我希望我的程序有类似的东西,但不知道究竟是怎么回事.

我们假设我们有这个功能:

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

我想要这样的函数调用:

Function(5, 1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)

那会有用吗?因为我不想要va_list的"混乱",我也不想创建:

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

仅仅因为在这种情况下我只需要一个简单的指针.有人可以指点我正确的方向吗?非常感谢你.

编辑:谢谢大家的宝贵意见.我会满足于'现在不能使用标准的C/C++,并寻找一种不同的方法解决我的问题.

再次,非常感谢你.

jro*_*rok 3

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});
}
Run Code Online (Sandbox Code Playgroud)

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

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

这适用于 C++03。该数组必须是 const,否则您无法传递这样的临时初始值设定项列表。如果需要修改函数内的元素,则需要制作副本。