我正在用C ++制作纸牌游戏,并使用onClick()方法制作了一个Button类。每张卡都将是一个按钮,但是单击时我不会使每张卡做不同的事情。是否可以通过某种方式重写每个实例的onClick()函数来实现此目的,而不是创建50个不同的类方法或50个不同的类?
我尝试为每个不同的实例创建一个函数,并将其作为类中的字段传递。然后,onClick()函数充当每个实例的包装,并调用在Button构造函数中作为参数传递的函数,但是我试图避免在Button构造函数中添加函数参数。
答案 0 :(得分:2)
有许多可能的解决方案。在我的讨论中突然弹出的一个例子是,您可能有一个由50个函数指针组成的数组(或更确切地说是std::function
对象),每个函数指针都指向一个处理特定“卡片”的函数。或者只是有一个这样的std::function
对象,您可以将其初始化为构造函数初始化程序列表中的正确函数(例如)。
如果这些功能之间的差异很小,那么将其收集到单个功能中并具有例如switch
语句来做一些不同的小细节?
答案 1 :(得分:2)
您要的内容通常称为高阶编程和function-objects
在c++中,您可能需要使用例如。 std::function
(std-function)并将其存储在卡类中-如您所说 。但是由于您不想在构造函数中传递它(为什么?),因此可以使成员成为可选的,例如。 std::optional<std::function<void()> >