簡體   English   中英

在類中初始化向量

[英]Initialize vectors in classes

是否可以在結構或類中初始化向量。 這是一個我要如何使其工作的示例

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被保存為對象中的菜單入口點。

因此,如果不可能,您可以建議哪些替代方法?

將這些成員設為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執行相同的操作。

在C ++ 11中,您可以完全做到這一點(或者至少可以,如果類成員是公共的,則可以這樣做)。

如果您被困在過去,那就更麻煩了; 編寫函數以創建並返回向量,或者使用Boost.Assignment庫之類的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM