如何使用可变参数函数而无需传递参数数量并且仅带有3个点?

问题描述 投票:0回答:2

考虑下面的代码,是否可以在不获取参数数量的情况下定义可变参数函数?

void printFunction(...)
{
    int noOfArgs = "Any way to get number of arguments?";
    va_list args;
    va_start(args, noOfArgs);
    cout << va_arg(args, int) << endl;
    for (int i = 2; i <= noOfArgs; i++)
    {
        cout << va_arg(args, int) << endl;
    }
    va_end(args);
}


int main()
{

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

    return 0;
}
c++ variadic
2个回答
0
投票

我们使用C ++ 17中的fold expressions完成此操作>

template<class... T>
void printFunction(T&&... args)
{
    std::cout << (... + args);
}

Demo


0
投票

在C va_args中无法获取参数数量。最好的办法是使用一个魔术值(该值终止序列)和一个宏以将其隐藏在用户面前:

© www.soinside.com 2019 - 2024. All rights reserved.