Sta*_*ser 0 c++ function c++11
给定c ++中的函数,有没有办法获得我的函数所需的参数数量?(比如argc用mainc语言).
例如:
double MyFunction(int x , int y) {
int NumOfParam= //.... =2;
}
Run Code Online (Sandbox Code Playgroud)
为什么这对我有用?
例如,我想编写一个函数,将函数的所有参数插入到a中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]");
}
}
Run Code Online (Sandbox Code Playgroud)
你正在寻找的是一个功能模板和可变参数模板(a/k/a参数包):
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
}
Run Code Online (Sandbox Code Playgroud)
这通常不是您默认使用的.考虑使用范围:
template<class Iterator>
void f(Iterator begin, Iterator end)
{
std::cout << std::distance(begin, end) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
这更具惯用性.
在我看来,你来自JavaScript背景,其中所有函数都有一个arguments数组.C++不是JavaScript,它是不可能的.
如果你想拥有一个动态数量的参数,那么解决方案是:
std::initializer_listargc与argv类似的解决方案如果你想要做的就是填充一个向量,那么我建议你直接填充它,或者通过循环在需要的时间和地点填充,或者通过构造函数来填充std::initializer_list(如我的一条评论中所解释的).
如果您确实需要将可变数量的参数传递给函数,那么我建议使用参数包.