C++ 函数重载:如何保持相同的定义(主体)而只更改参数?

C++ 函数重载:如何保持相同的定义(主体)而只更改参数?,c++,overloading,C++,Overloading,我正在做一个吃豆人游戏,我想写一个传送功能,因为我的传送功能代码在吃豆人移动功能和鬼魂移动功能中重复。我有一个吃豆人的结构,还有一个鬼魂数组4的结构。两者都有相同的变量,比如posX和posY,还有一些不同的变量,比如幽灵的comportment。问题是,除了结构的名称之外,传送功能的主体对于这两个结构都是完全相同的,而且由于两者都是不同的结构,所以我不能只在参数中传递一个结构。我可以重载函数,一个是参数中的Pacman结构,另一个是重影结构,但我必须为两个函数定义复制代码,这是完全无用的,因为

我正在做一个吃豆人游戏,我想写一个传送功能,因为我的传送功能代码在吃豆人移动功能和鬼魂移动功能中重复。我有一个吃豆人的结构,还有一个鬼魂数组4的结构。两者都有相同的变量,比如posX和posY,还有一些不同的变量,比如幽灵的comportment。问题是,除了结构的名称之外,传送功能的主体对于这两个结构都是完全相同的,而且由于两者都是不同的结构,所以我不能只在参数中传递一个结构。我可以重载函数,一个是参数中的Pacman结构,另一个是重影结构,但我必须为两个函数定义复制代码,这是完全无用的,因为我想避免重复代码。我还可以创建一个字符结构来存储结构Pacman和Ghost,但我更喜欢将它们分开,因为我对它们有更多的控制权,例如,如果我想稍后声明新的Ghost,并且我的代码已经非常繁重。有什么建议吗?谢谢

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

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

也就是说,我希望简单游戏中的代理是从一个公共基类派生的对象,该基类为自定义功能提供公共功能和虚拟功能。

这正是函数模板的用途。这似乎是一个典型的例子,说明了为什么您希望继承。我想您需要使您的程序成为对象面向......的