我试图用一个微薄的地雷项目来处理排雷问题。 我试图建立一个简单的门乌班(固定班),以建造、展示和执行一个菜单。 这一菜单应当从“主”方案的第二个班级日历中履行职能。
哪些接口 我努力做到:
int main()
{
Menu menu;
menu.add("Exit program", &Calendar::exit);
menu.show();
menu.execute(menu.EXIT); // or just 0
}
我们应该看一下:
中东和北非
0 出境方案
我想实现的是,添加(a)-方法应当增加一个功能点,用于绘制地图和设计;int,功能点-点; 这是我的问题开始的。 目前,我有一个硬编码阵列,在我的执行(a)-方法中设有职能点。 现在,我要充满活力地增加一个具有适当职能的菜单项目。
class Menu {
// declaration of function-pointer thingy
typedef void (Calendar::*CalendarPtr)();
// will hold the string in the add()-method
std::vec纽约总部r<std::string> options_strings;
// will hold the integer associated 纽约总部 the appropriate function
std::map<int, CalendarPtr> options_map;
public:
// possible options
enum OPTIONS {EXIT};
// shows the menu on-screen
void show();
// should add string 纽约总部 vec纽约总部r, function-pointer 纽约总部 map
void add(std::string, CalendarPtr);
// should execute appropriate function (based on option passed)
void execute(OPTIONS option);
};
// ...
void Menu::add(std::string option, CalendarPtr) // what doesn t work obviously
{
// adding string 纽约总部 vec纽约总部r
options_strings.push_back(option);
// Just binding the latest entry of the string 纽约总部 the function-pointer
int index = options_strings.size();
// TRYING 纽约总部 add function-pointer 纽约总部 map
options_map.insert(std::pair<int, CalendarPtr>(index, CalendarPtr));
}
Menu::execute(OPTIONS option) // enum declared as public in class
{
int option = EXIT; // or 0
CalendarPtr cptr[] = {&Calendar::exit};
Calendar* cal;
if (option >= 0 && option < static_cast<int>(options_strings.size()))
(cal->*cptr[option])();
}
插入线目前提供:
页: 1
which means that my use of function-pointers isn t right, but what is the right way? How would I declare the wanted add()-method (so which parameters), how would I insert the function-pointers in the map and how would I call the desired item in the map with my execute()-method?
如果情况不明确,请说,我试图更好/更动地解释:
提前感谢!
http://www.ohchr.org。
一
void Menu::add(std::string option, CalendarPtr)
// ...
options_map.insert(std::pair<int, CalendarPtr>(index, CalendarPtr));
纽约总部
void Menu::add(std::string option, CalendarPtr cptr)
// ...
options_map.insert(std::pair<int, CalendarPtr>(index, cptr));
但是,在插入的职位上,你如何“召唤”职能(分析指数0)? 选择:图0;t工作......
<><><><>>>>
它插入了指数1的职称;问题得到解决!
I在我掌握这一方法时有错误:。
void Menu::execute(OPTIONS option)
{
Calendar c;
Calendar* calendar = &c;
CalendarPtr cptr = options_map.at(0);
(*calendar.*cptr)();
}
在扔 instance子后,要求终止:离去——包 what什么():地图:at
因此,我的结论是,这段话没有成功,为什么如此?