是否可以初始化sruct或类中的向量。这是一个如何让它工作的例子
class MenuItem {
std::string name; // Name of menu item
void (*func)(); // Function of menu item
MenuPage* subPage; // Pointer to submenu
};
class MenuPage {
std::string menuTitle;
std::vector<MenuItem> menuItems;
};
static const MenuPage menuMain = {
"Main menu",
{{ "Item1", 0, 0 },
{ "Item2", 0, 0 },
{ "Item3", 0, 0 }}
};
此结构应代表Windows中的动态控制台菜单。 我使用单例模式来访问菜单。 MenuPage *类型的membervar被保存为对象中的菜单入口点。
所以,如果不可能,你可以建议哪些替代方法?
答案 0 :(得分:1)
将这些成员设为public
,它将在C ++ 11中初始化。否则,您可以使用初始化列表和构造函数:
class MenuPage {
std::string menuTitle;
std::vector<MenuItem> menuItems;
public:
MenuPage (std::string s, std::vector<MenuItem> m) :
menuTitle(s), menuItems(m) {}
};
static const MenuPage menuMain (
"Main menu",
{{ "Item1", 0, 0 },
{ "Item2", 0, 0 },
{ "Item3", 0, 0 }}
);
请注意,你应该做同样的事情MenuItem
。
答案 1 :(得分:0)
在C ++ 11中,你可以做到这一点(至少,如果班级成员是公开的,你可以这样做。)
如果你被困在过去,那就太麻烦了;要么编写一个函数来创建并返回向量,要么使用类似Boost.Assignment库的东西。