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}); }