我在 Github 上使用 struct 作为详细信息
ConsoleMenu.h
typedef int (*MENU_FUNCTION_POINTER)();
typedef struct _MENU MENU;
typedef MENU* MENU_POINTER;
struct _MENU
{
bool isValid; // C++ can not compare struct is NULL
string text;
MENU_FUNCTION_POINTER func;
bool isOpen;
MENU_POINTER childMenu;
MENU_POINTER parent;
};
class ConsoleMenu
{
private:
static MENU _chapters[];
static MENU _chapter1[];
static MENU _chapter2[];
};
ConsoleMenu.cpp
MENU ConsoleMenu::_chapters[] = {
{true, "Chapter 1", NULL, false, ConsoleMenu::_chapter1, NULL},
{true, "Chapter 2", NULL, false, ConsoleMenu::_chapter2, NULL},
{true, "Chapter 3", NULL, false, NULL, NULL},
{true, "Chapter 4", NULL, false, NULL, NULL},
{false, "unused", NULL, false, NULL, NULL}
};
MENU ConsoleMenu::_chapter1[] = {
{true, "Example 1.1", Example1, false, NULL, ConsoleMenu::_chapters},
{true, "Example 1.2", Example2, false, NULL, ConsoleMenu::_chapters},
{false, "unused", NULL, false, NULL, NULL}
};
MENU ConsoleMenu::_chapter2[] = {
{true, "Example 2.1", NULL, false, NULL, ConsoleMenu::_chapters},
{true, "Example 2.2", NULL, false, NULL, ConsoleMenu::_chapters},
{true, "Example 2.3", NULL, false, NULL, ConsoleMenu::_chapters},
{false, "unused", NULL, false, NULL, NULL}
};