C ++函数返回不同的数据类型[重复]

Posted

技术标签:

【中文标题】C ++函数返回不同的数据类型[重复]【英文标题】:C++ Function Returning Different Data Types [duplicate] 【发布时间】:2014-06-16 21:35:13 【问题描述】:

首先,如果这个问题的标题含糊不清,请允许我道歉。

也就是说,我正在尝试编写一个函数,该函数将根据函数内的条件返回多种数据类型(全部由我定义)中的任何一种。本质上,我想做的是:


    A itemA;
    B itemB;
    C itemC;

    ...

    Do some calculations

    ...

    if (some condition)
        return itemA;
    else if (some other condition)
        return itemB;
    else
        return itemC;

当然,这个例子有点做作,但我认为这说明了我的意思。

类 A、B 和 C 都是其他类 S 的子类,但我不想返回 S,因为如果这样做,数据将会丢失。此外,即使返回类型如此重载,功能也不会真正改变,这似乎很愚蠢。那么,这应该是模板函数还是我需要做的其他事情?

谢谢,

【问题讨论】:

声明itemAitemBitemC为指针,动态分配它们,定义函数返回类型为S*(即指向基类的指针)。欢迎来到多态世界。 一个函数只能有一个返回类型。如果S是返回类型会丢失什么? 我没想过这样做,但我不必动态转换结果吗? itemAitemBitemC 是本地的。所以不能按值返回。其次,"the functionality doesn't really change even if the return type does so overloading it seems foolish"——因此将相同的功能分解并创建一个函数——然后调用该函数。我看不出这有什么“愚蠢”的——它被称为refactorization 这个问题经常被问到......例如***.com/q/2237775 搜索“return different types [c++]”之类的。 【参考方案1】:

如果返回指向S的指针或引用,就不会出现拼接问题:

S* func()
 ... 

请注意,您必须动态分配变量。

【讨论】:

如果 A、B 和 C 是局部变量,这将不起作用,如 OP 的示例代码所示。

以上是关于C ++函数返回不同的数据类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言自定义数据类型

如何存储多个数据类型的数组

C语言函数怎么像python那样返回多个值?(三种方法:1设置全局变量 2传递指针 3使用结构体返回不同类型的数据)

C语言中各种数据类型有啥区别?

Android jni/ndk编程二:jni数据类型转换(primitive,String,array)

C语言各个数据类型取值范围