函数重载:如何保持相同的定义(正文)并只更改参数?

时间:2013-12-13 20:26:15

标签: c++ overloading

我正在制作一个Pacman游戏,我想写一个Teleport()函数,因为我的PacmanMovement()函数和我的GhostsMovement()函数中复制了传送功能的代码。我有Pacman的结构,以及ghosts的结构(4的数组)。两者都有相同的变量(如“posX”和“posY”)和一些不同的变量(如幽灵的“comportment”)。问题是传送特征的主体对于两者完全相同,除了结构的名称,并且由于两者都是不同的结构,我不能只在参数中传递一个结构。我可以重载函数,一个在参数中具有Pacman结构,另一个具有重影结构,但是我必须为两个函数定义复制我的代码,这完全没用,因为我想避免重复代码。我也可以创建一个“字符”结构来存储两个结构(Pacman和ghosts),但我更喜欢将它们分开,因为我对它们有更多的控制(例如,如果我想稍后声明新的鬼魂)我的代码是已经非常沉重。有什么建议?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将该函数设为模板,推导出适当的对象类型:

template <typename Agent>
void Teleport(Agent& agent, int x, int y) {
     agent.x = y;
     agent.y = y;
}

也就是说,我希望简单游戏中的代理可以是从公共基类派生的对象,它为自定义功能提供通用功能和virtual函数。