C ++如何使虚拟函数返回任何类型的指针?

时间:2018-07-31 01:10:01

标签: c++ pointers virtual-functions

让我们说我有一个类(foo),它具有一个整数和一个字符。我希望能够使用从文件中加载的信息来填充此数据,因此我添加了一个加载函数,该函数将foo成员变量之一的指针(基于ID)返回到对象,然后将其设置为加载的值从文件中。在这种情况下,我可以使用自动返回类型,但是我希望功能是虚拟的,以便被剥夺的类可以在拥有更多变量的情况下使用不同的ID。我知道我可以使用空指针,但是我希望避免使用一个空指针。

1 个答案:

答案 0 :(得分:1)

这不是virtual的好用例,因为您通过具有其参数和返回类型的基类指针调用了virtual成员,并且根据派生的类型工作运行时实例。 virtual成员不能返回很多不同的东西,甚至不能以不同的方式被调用。这些是具有静态分派的不同重载函数。

如果您需要一堆采用charint或其他类型并返回的不同成员,则需要将它们编写为单独的重载函数,或者可能作为非{{ 1}}模板,例如virtual

如果您需要返回的指针可能是任何类型的对象,则该指针应该是它们的通用基类的指针。如果确实没有,则该语言的规则确实允许您将template <typename T> T* foo::bar(const T&);强制转换为任何类型的对象指针,但是(如您所说)是一种代码味道。