我有一个菜单驱动的程序,菜单功能需要很多参数,我希望能够从其他函数调用菜单功能,这意味着每个函数都必须有这么多参数,即使它们没有&# 39;不需要它们还是有更好的方法?交换机正在调用其他功能,这些功能都与菜单1具有相同的参数。这是代码:
void menu(int *sklad, int *Max, int *Vrh, int *sklad2, int *Rep, int *Glava){
int izbira;
cout << "Sklad - izbira:" << endl;
cout << "1) Vnos podatka" << endl;
cout << "2) Branje podatka" << endl;
cout << "3) Izpis celotnega sklada" << endl << endl;
cout << "Krozna vrsta - izbirta:" << endl;
cout << "4) Vnos podatka" << endl;
cout << "5) Branje podatka" << endl;
cout << "6) Izpis vrste od glave do repa" << endl << endl;
cout << "7) Konec" << endl << endl;
cout << "Izbira: ";
cin >> izbira;
if(!cin){
cout << "Vnesite celo stevilo" << endl;
menu(sklad, Max, Vrh, sklad2, Rep, Glava);
}
switch(izbira){
case 1: {
vnosPodatka(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 2: {
branjePodatka(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 3: {
izpisSklada(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 4:{
vnosPodatka2(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 5: {
branjePodatka2(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 6: {
izpisSklada2(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 7: {
break;
}
default: {
cout << "napaka" << endl;
menu(sklad, Max, Vrh, sklad2, Rep, Glava);
}
}
}
答案 0 :(得分:1)
带有捕获的lambda可以在这里提供帮助。我没有提出默认值,因为我将指针视为参数,我认为这是数据的地址。 void menu(int * sklad,int * Max,int * Vrh,int * sklad2,int * Rep,int * Glava);
auto fixedMenu = [&fixedSklad, &fixedMax, &fixedVhr, &fixedsklad2, &fixedRep](int * Glava) { menu(fixed...., Glava); });
fixedMenu(&gLava);
您可以根据需要使用尽可能多的固定参数执行这样的lambdas,以便在您方便时创建另一个函数。
我还建议使用菜单功能参数的参考,如果它们不能是nullptr
和const
,如果它们无法在内部更改。
答案 1 :(得分:0)
C ++是一个面向对象的程序,我建议创建一个Menu类。您可以将其设为单例,以便程序的其他部分可以对其进行修改。
Menu.h
class Menu {
Menu(int *_sklad, int *_Max, int *_Vrh,
int *_sklad2, int *_Rep, int *_Glava)
: sklad(_sklad), Max(_Max), Vrh(_Vrh),
sklad2(_sklad2), Rep(_Rep), Glava(_Glava) {}
public:
int* sklad;
int* Max;
int* Vrh;
int* sklad2;
int* Rep;
int* Glava;
static Menu& sharedInstance();
void run();
};
Menu.cpp
#include <Menu.h>
Menu& sharedInstance() {
static Menu instance(<default instanciation>);
return instance;
}
void Menu::run()
{
int izbira;
cout << "Sklad - izbira:" << endl;
cout << "1) Vnos podatka" << endl;
cout << "2) Branje podatka" << endl;
cout << "3) Izpis celotnega sklada" << endl << endl;
cout << "Krozna vrsta - izbirta:" << endl;
cout << "4) Vnos podatka" << endl;
cout << "5) Branje podatka" << endl;
cout << "6) Izpis vrste od glave do repa" << endl << endl;
cout << "7) Konec" << endl << endl;
cout << "Izbira: ";
cin >> izbira;
if(!cin){
cout << "Vnesite celo stevilo" << endl;
menu(sklad, Max, Vrh, sklad2, Rep, Glava);
}
switch(izbira){
case 1: {
vnosPodatka(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 2: {
branjePodatka(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 3: {
izpisSklada(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 4:{
vnosPodatka2(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 5: {
branjePodatka2(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 6: {
izpisSklada2(sklad, Max, Vrh, sklad2, Rep, Glava);
break;
}
case 7: {
break;
}
default: {
cout << "napaka" << endl;
menu(sklad, Max, Vrh, sklad2, Rep, Glava);
}
}
然后,您可以根据需要修改实例,而不需要重复所有命令行。