【发布时间】: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。 -
这个问题经常被问到......例如stackoverflow.com/q/2237775 搜索“return different types [c++]”之类的。
标签: c++ template-function