C++ 我完全同意你。正如目前所描述的,枚举只是一种选择在类中实际调用哪个方法的方法。它只是将wearm.XY(Catcher)转换为wearm.X(Catcher,Y),对于给定的用例,它的实用性是有争议的。我想我的答案是基于这样的假设,OP的目标是分散新捕获方

C++ 我完全同意你。正如目前所描述的,枚举只是一种选择在类中实际调用哪个方法的方法。它只是将wearm.XY(Catcher)转换为wearm.X(Catcher,Y),对于给定的用例,它的实用性是有争议的。我想我的答案是基于这样的假设,OP的目标是分散新捕获方,c++,design-patterns,enums,C++,Design Patterns,Enums,我完全同意你。正如目前所描述的,枚举只是一种选择在类中实际调用哪个方法的方法。它只是将wearm.XY(Catcher)转换为wearm.X(Catcher,Y),对于给定的用例,它的实用性是有争议的。我想我的答案是基于这样的假设,OP的目标是分散新捕获方法的定义,这样它们就不必在一个地方声明,这就解决了问题。如果目标是其他东西,那么OP可以解释什么。这允许我使用相同的方法,这将完成一些必须完成的标准工作,以及在需要时调用自定义方法。这有点冗长,但会完全符合我的需要。谢谢这允许我使用相同的方法,


我完全同意你。正如目前所描述的,枚举只是一种选择在
类中实际调用哪个方法的方法。它只是将
wearm.XY(Catcher)
转换为
wearm.X(Catcher,Y)
,对于给定的用例,它的实用性是有争议的。我想我的答案是基于这样的假设,OP的目标是分散新捕获方法的定义,这样它们就不必在一个地方声明,这就解决了问题。如果目标是其他东西,那么OP可以解释什么。这允许我使用相同的方法,这将完成一些必须完成的标准工作,以及在需要时调用自定义方法。这有点冗长,但会完全符合我的需要。谢谢这允许我使用相同的方法,它将执行一些必须执行的标准操作,以及在需要时调用自定义方法。这有点冗长,但会完全符合我的需要。谢谢
void Weapon::Catch(Character Catcher, CatchMethod Method)
{
    switch (Method)
    {
        case Method::PickUp: OnPickup(Catcher); break;
        case Method::Pass:   OnPass(Catcher);  break;
        // etc
    }
}
MyWeapon->Catch(Catcher, Method::Pickup);
MyWeapon->Catch(Catcher, Method::Pass);
MyWeapon->CatchByPickup(Catcher);
MyWeapon->CatchByPass(Catcher);
void pickup(Weapon weapon, Character catcher) {
    /* Do whatever your OnPickup does */
}

void pass(Weapon weapon, Character catcher) {
    /* Do whatever your OnPass does */
}
pickup(MyWeapon, Catcher);
pass(MyWeapon, Catcher);
using CatchMethod = std::function<void(Character)>;

void Weapon::Catch(Character Catcher, CatchMethod Method)
{
  Method(Catcher);
}
// If its a regular function you can just use the pointer to the function
weapon.Catch(Player, &OnPickup);
// If its a member function you can use lambda
weapon.Catch(Player, [this](Character Catcher){OnPickup(Catcher);});
// or std::bind (slightly more verbose and less flexible)
weapon.Catch(Player, std::bind(&Weapon::OnPickup, this, std::placeholders::_1));