C++ 如何避免基于返回类型重载函数?

C++ 如何避免基于返回类型重载函数?,c++,inheritance,C++,Inheritance,(我之所以包括这段代码,是因为人们总是要求它。不过,这段代码现在无法编译) 我写了一个小的爬虫游戏(虽然现在还不是真正的游戏),但是我对查找给定正方形上的内容的函数有一个问题。 A编写了一个名为search_coord的函数,该函数搜索数据库以查看对象是否位于给定的正方形上,并返回它找到的任何内容。当我只处理几个简单的类时,它工作得很好,但从那时起我就尝试合并继承,现在我不知道如何使它工作 最初,search_coord的返回类型是Object&(Object是大多数其他类派生的基类)。我以对象

(我之所以包括这段代码,是因为人们总是要求它。不过,这段代码现在无法编译)

我写了一个小的爬虫游戏(虽然现在还不是真正的游戏),但是我对查找给定正方形上的内容的函数有一个问题。 A编写了一个名为search_coord的函数,该函数搜索数据库以查看对象是否位于给定的正方形上,并返回它找到的任何内容。当我只处理几个简单的类时,它工作得很好,但从那时起我就尝试合并继承,现在我不知道如何使它工作

最初,search_coord的返回类型是Object&(Object是大多数其他类派生的基类)。我以对象向量的形式将所有对象存储在数据库中。 我需要创建更多的数据库(用于NPC和图形),以及 我认为,因为Object是基类,所以search_coord也能够返回派生类(显然不是)

我尝试重载search_coord来处理不同的派生类型,但唯一的区别是返回类型,不能基于此重载。 然后,我尝试使用一个函子(在上面的代码中)。这几乎是可行的,除了重载(null?)运算符不能接受参数之外,参数是函数工作所必需的。我能看到的唯一方法是在内部将参数合并到search_coord函子中,并在每次需要调用search_coord时分别更改它们。这似乎是一个过于复杂的想法,所以我可能要把函子全部划掉。 如果search_coord是Object的成员,那就很容易了。我可以把它变成虚拟的,然后在所有派生类中重新定义它(如果我理解它的用法正确的话)。问题是,它必须是(据我所知)数据库的一个成员。我试图使它成为Object的一个成员,但意识到我不确定调用函数的对象实例是什么(因为函数的目的是查找对象实例)

这里的任何帮助都将不胜感激

(写这篇文章的时候我有一个想法。我可以让search_coord函数虚拟静态,这样我就不会调用任何一个Object实例来使用它了吗?)


谢谢

如何解决重载问题(即,任何人如何知道调用/应该调用哪个实现)?(我不主张将其变得如此复杂,但请参见)@delnanIm不是问如何直接基于返回类型重载,而是问如何做我正在尝试做的事情,这将涉及基于返回类型的重载,如果可能的话。我只需要知道要尝试的路径。@user2864740这就是我提到的函子方法。它可以工作,但不允许传递任何内容,因此无论何时使用它,我都必须首先使用单独的函数更改函子的一些内部值,然后使用函子。你说得对,这确实让事情变得过于复杂。