【问题标题】:C++ how to make a virtual funtion return any type of pointer?C ++如何使虚函数返回任何类型的指针?
【发布时间】:2018-07-31 01:10:01
【问题描述】:

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

【问题讨论】:

  • 模板对您有帮助吗?
  • 假设可以这样做,您希望调用者如何计算返回的类型?
  • std::variantstd::any 可能会有所帮助,但不确定你应该做你想做的事......
  • 不完全是你描述的,但你可能想看看Visitor pattern
  • 能否在纯英文的基础上添加一些代码,让答题者更好地理解你的想法?

标签: c++ pointers virtual-functions


【解决方案1】:

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

如果您需要一堆不同的成员来接受和返回charint 或其他类型,您可能希望将它们编写为单独的重载函数,或者可能编写为非virtual 模板,例如作为template <typename T> T* foo::bar(const T&);

如果您需要返回一个可以指向任何类型对象的指针,那应该是指向它们的公共基类的指针。如果真的没有,该语言的规则确实允许您将 void* 强制转换为任何类型的对象指针,但是(如您所说)这是一种代码味道。

【讨论】:

    猜你喜欢
    • 2011-03-04
    • 1970-01-01
    • 2010-11-03
    • 2014-01-04
    • 2013-11-29
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多