在 C++ 中,我可以定义一个具有可变数量参数的函数,如下所示:
void a(int a...) {
std::cout << a << std::endl;
}
然后这样调用它:
a(100, 200, 300);
但是,显然我只能访问第一个参数:调用的输出是 100
。
如何使用此表示法访问其他参数?
最佳答案
你的语法是......不幸的是,它指的是 C 风格的可变参数函数。
在 C++11 中,您应该更喜欢 variardic template
。最简单的方法是这样的:
首先,一些辅助代码:
#include <utility>
template<typename Lambda>
void for_each_arg( Lambda&& unused ) {}
template<typename Lambda, typename Arg1, typename... Args>
void for_each_arg( Lambda&& closure, Arg1&& arg1, Args&&... args ) {
closure( std::forward<Arg1>(arg1) );
for_each_arg( std::forward<Lambda>(closure), std::forward<Args>(args)... );
}
现在,我们使用它:
#include <iostream>
template<typename... Args>
void foo( Args&&... args ) {
for_each_arg( [](int x){
std::cout << x << "\n";
}, std::forward<Args>(args)... );
}
int main() {
foo( 1, 2, 3 );
}
我们可以访问每个参数,并确保它们转换为 int
。请注意,到 int
的转换被推迟到调用 for_each_arg
的主体。
关于c++ - 这个变量参数符号是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913155/