簡體   English   中英

如何使用類成員函數作為默認值

[英]How to use a class member function as defualt value

我有這堂課

class InventoryManagement
{
public:
    typedef void(InventoryManagement::*Action)(void);
    typedef void(InventoryManagement::*ActionWithReturn)(InventoryItem);

    void Initialize(int inventoryQty, int maxQty, ActionWithReturn onAdd = nullptr , Action onMaxQtyReach = nullptr, Action onQtyReset = nullptr, Action onSideChnage = nullptr);

    Action getStrategyOnMaxQtyReach();
    Action getStrategyOnQtyReset();
    Action getStrategyOnSideChange();
    ActionWithReturn getOnAdd();

private:

    // Private Functions Data members
    ActionWithReturn m_onAdd;
    Action m_OnSideChange;
    Action m_OnQtyReset;
    Action m_OnMaxQtyReach;


    // Default Function 
    void OnAddDefault(InventoryItem item) { }
    void OnMaxQtyReachDefault() { }
    void OnQtyResetDefault() { }
    void OnSideChangeDefault() { }
};

函數Initialize設置Action類型的數據成員。 我創建了不注意的默認操作,我想將它們作為默認參數傳遞。 如果用戶沒有向Initialize發送任何函數指針,那么這些函數將被設置。

函數的簽名是:

void Initialize(int inventoryQty, int maxQty, ActionWithReturn onAdd = nullptr , Action onMaxQtyReach = nullptr, Action onQtyReset = nullptr, Action onSideChnage = nullptr);

我試過void Initialize(int inventoryQty, int maxQty, ActionWithReturn onAdd = InventoryManagement::OnAddDefault , Action onMaxQtyReach = nullptr, Action onQtyReset = nullptr, Action onSideChnage = nullptr); 而不是nullptr ,但編譯器發出"Call to non-static member function without an object argument"

語法是&InventoryManagement::OnAddDefault

void Initialize(
    int inventoryQty,
    int maxQty,
    ActionWithReturn onAdd = &InventoryManagement::OnAddDefault, // <-- 
    Action onMaxQtyReach = nullptr,
    //... etc
)

在側節點上,我鼓勵您考慮使用構造函數而不是初始化方法。

暫無
暫無

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

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