初始化类中的向量

时间:2014-04-04 13:47:52

标签: c++

是否可以初始化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被保存为对象中的菜单入口点。

所以,如果不可能,你可以建议哪些替代方法?

2 个答案:

答案 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库的东西。