C++ 在C++;

C++ 在C++;,c++,C++,我想对函数的一组参数进行相同的处理。有没有一种方法可以循环所有参数?我是按照下面代码中的方式来做的,但是我想看看是否有一种简洁的方法来做这件事 void methodA(int a1, int a2, int b1, double b2){ //.. some code methodB(a1, f(a1)); methodB(a2, f(a2)); methodB(b1, f(b1)); methodB(b

我想对函数的一组参数进行相同的处理。有没有一种方法可以循环所有参数?我是按照下面代码中的方式来做的,但是我想看看是否有一种简洁的方法来做这件事

 void methodA(int a1, int a2, int b1, double b2){   
        //.. some code 
        methodB(a1, f(a1));
        methodB(a2, f(a2));
        methodB(b1, f(b1));
        methodB(b2, f(b2));
        // more code follows ...

   }

int f(int a){
      // some function. 
   return a*10;
}

double  f(double b){
   return b/2.0;
}

是的,你要找的概念叫做a。

你可以使用可变模板:

template <typename T, typename ...Args>
void methodAHelper(T && t, Args &&... args)
{
  methodB(t, f(t));
  methodAHelper(std::forward<Args>(args)...);
}

void methodAHelper() { }

template <typename ...Args>
void methodA(Args &&... args)
{
  // some code
  methodAHelper(std::forward<Args>(args)...);
  // some other code
}

您也可以考虑更改<代码>方法B >代码>:因为第二个参数是第一个参数的函数,您可能只能传递第一个参数,并在<代码>方法>()/<代码>内执行对<代码>()的调用。这减少了耦合和相互依赖;例如,

f
的整个声明只需要
methodB
的实现知道。但这取决于你的实际情况

或者,如果只有一个
methodB
重载,其第一个参数的类型为
T
,则您可以将
std::vector
传递给
methodA
,并对其进行迭代:

void methodA(const std::vector<T> & v)
{
  // some code
  for (auto it = v.cbegin(), end = v.cend(); it != end; ++it)
    methodB(*it, f(*it));
  // some more code
}

int main() { methodA(std::vector<int>{1,2,3,4}); }
void方法(const std::vector&v)
{
//一些代码
for(auto it=v.cbegin(),end=v.cend();it!=end;++it)
方法B(*it,f(*it));
//还有代码吗
}
int main(){methodA(std::vector{1,2,3,4});}

取决于您要做的事情。最简单的方法可能是重新访问函数,看看它是否可以将数组或std::vector作为参数。使用可变路径可能要简单得多

也许您可以将指针传递给数组,或者传递包含数组的结构,您可以直接进行迭代?它确实有一个缺点,即它使算术不固定。它是整数和双精度的组合,因此无法使用数组或向量。我可以使用struct,但我想看看是否有紧凑的方法来实现这一点。
void methodA(const std::vector<T> & v)
{
  // some code
  for (auto it = v.cbegin(), end = v.cend(); it != end; ++it)
    methodB(*it, f(*it));
  // some more code
}

int main() { methodA(std::vector<int>{1,2,3,4}); }