参数相似但输出不同的函数

  • 本文关键字:函数 输出 相似 参数 c++
  • 更新时间 :
  • 英文 :


我必须编写多个具有相似参数的函数。有没有办法使它更短、可读?这是一个示例代码

#include <iostream>
#include <vector>
void test1(int index){
std::cout << "Chosen Answer : " << index << std::endl;
std::cout << "ABCD ";
}
void test2(int index){
std::cout << "Chosen Answer : " << index << std::endl;
std::cout << "JKLM ";
}
void test3(int index){
std::cout << "Chosen Answer : " << index << std::endl;
std::cout << "PQRS ";
}
int main() {
std::vector<int> input;
for(int i=0; i<5; i++){
input.push_back(i);
}

test1(input[1]);
test2(input[2]);
test3(input[3]);

return 0;

}

在您的示例中,您可以创建一个ể具有另一个参数的nal函数,该参数指定要使用的函数:

void test(int index, int mode)
{
switch(mode)
{
case 1:
test1();
break;
case 2:
test2();
break;
case 3:
test3();
break;
default:
std::cout << "Invalid mode ";
break;
}
}
// code ...
int main()
{
test(input, 1) // call test1()
test(input, 2) // call test2()
test(input, 3) // call test3()
}

对注释进行扩展,基本上总是相同的过程:找出它们之间的相同之处和不同之处。你们在另一个函数中输入的是相同的,不同的是那个函数的参数。

相同之处:

std::cout << "Chosen Answer : " << index << std::endl;
std::cout <<

有什么不同

"some string";

把相同的东西放在一个函数中,不同的是该函数的参数:

void test(int index, const std::string& text) {         
std::cout << "Chosen Answer : " << index << std::endl;
std::cout << text;
}
void test1(int index) { test(index,"ABCD"); }
void test2(int index) { test(index,"JKLM"); }
void test3(int index) { test(index,"PQRS"); }

这是从函数的角度进行的重构。如果我们考虑main,那么也许我们一开始就不需要test1test2test3

int main() {
std::vector<int> input;
for(int i=0; i<5; i++){
input.push_back(i);
}

std::vector<std::string> texts{"ABCD","JKLM","PQRS"};
for (int i=0; i<3; ++i) {
test(input[i+1],texts[i]);
}
}

是的,因为在每个函数中都有不同的数学逻辑,必须根据给定的索引来完成,并且每个函数都用不同的段落打印数学逻辑的结果。

这不是您的代码示例所说明的,尽管过程是相同的:找到共同的部分,找到不同的部分。您可以将可调用函数传递给函数,以计算出一些数学问题。一个简单的方法是通过lambdas,例如:

template <typename F>
void calc(F f,int a, int b,const std::string& op) {
std::cout << a << op << b << "=" << f(a,b) << "n";
}
int main() {
calc( [](int a,int b) { return a+b; },1,2,"+");
calc( [](int a,int b) { return a-b; },1,2,"-");
}

您可以声明更短的方法。

#define DECLARE_TEST_METHOD(name, output_value) void test##name(int index) { 
std::cout << "Chosen Answer : " << index << std::endl; 
std::cout << output_value; 
}
DECLARE_TEST_METHOD(1, "ABCD ");
DECLARE_TEST_METHOD(2, "JKLM ");
DECLARE_TEST_METHOD(3, "PQRS ");

最新更新