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,因为如果这样做,数据将会丢失。此外,即使返回类型如此重载,功能也不会真正改变,这似乎很愚蠢。那么,这应该是模板函数还是我需要做的其他事情?
谢谢,
【问题讨论】:
声明itemA
、itemB
和itemC
为指针,动态分配它们,定义函数返回类型为S*
(即指向基类的指针)。欢迎来到多态世界。
一个函数只能有一个返回类型。如果S
是返回类型会丢失什么?
我没想过这样做,但我不必动态转换结果吗?
itemA
、itemB
和 itemC
是本地的。所以不能按值返回。其次,"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语言函数怎么像python那样返回多个值?(三种方法:1设置全局变量 2传递指针 3使用结构体返回不同类型的数据)