[英]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.