我可以知道我的函数有多少参数?

Sta*_*ser 0 c++ function c++11

给定c ++中的函数,有没有办法获得我的函数所需的参数数量?(比如argcmainc语言).

例如:

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)

YSC*_*YSC 9

你正在寻找的是一个功能模板和可变参数模板(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)

这更具惯用性.

  • @ Jean-BaptisteYunès问题被标记为c ++ 11;) (4认同)

Som*_*ude 7

在我看来,你来自JavaScript背景,其中所有函数都有一个arguments数组.C++不是JavaScript,它是不可能的.

如果你想拥有一个动态数量的参数,那么解决方案是:

  • 参数包
  • std::initializer_list
  • 如果您有来自另一个容器的序列,请使用迭代器对
  • C风格的可变参数函数(你需要一个特殊的参数来告诉你可变参数的数量,或者"参数结束"标记)
  • argcargv类似的解决方案

如果你想要做的就是填充一个向量,那么我建议你直接填充它,或者通过循环在需要的时间和地点填充,或者通过构造函数来填充std::initializer_list(如我的一条评论中所解释的).

如果您确实需要将可变数量的参数传递给函数,那么我建议使用参数包.