给定c ++中的函数,有没有办法获得我的函数需要的参数数量? (例如c语言中的argc
中的main
)。
例如:
double MyFunction(int x , int y) {
int NumOfParam= //.... =2;
}
为什么这对我有用?
例如,我想编写一个函数,将函数的所有参数插入vector
,我想用for loop
来迭代参数。
例如:
void MyFunction(int x,int y , int z){
std::vector<int> params;
for(int i=0; i< ?? ; i++) {
params.push_back("ArrayOfMyArguments[i]");
}
}
答案 0 :(得分:9)
您正在寻找的是与variadic templates (a/k/a parameter packs)结合使用的功能模板:
template<class ... Args>
void f(Args ... args)
{
std::cout << sizeof...(args) << "\n";
}
int main()
{
f(0, 1, 2); // prints 3
f(0, 1, 2, 3, 4); // prints 5
}
这通常不是默认情况下使用的。考虑使用范围:
template<class Iterator>
void f(Iterator begin, Iterator end)
{
std::cout << std::distance(begin, end) << "\n";
}
更为惯用。
答案 1 :(得分:7)
在我看来,你来自JavaScript背景,其中所有函数都有arguments
数组。 C ++不是JavaScript,也不可能。
如果您想拥有动态数量的参数,那么解决方案是:
std::initializer_list
argc
和argv
之类的解决方案如果您只想填充一个向量,那么我建议您直接填充它,或者通过循环在需要的时间和地点填充,或者通过构造函数获取std::initializer_list
(如下所述)我的一条评论)。
如果你真的需要向函数传递可变数量的参数,那么我建议使用参数包。