繁体   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