【发布时间】:2015-03-31 15:08:51
【问题描述】:
我有一个基类Attr(属性),它有两个派生类NomAttr(名义属性)和NumAttr(数值属性)。
每个都有一个name 成员,它总是字符串类型。
但是,他们的value 成员不同:对于NomAttr,我想获得string 类型的value,但对于NumAttr,我想获得double 类型的value .
虚拟函数不允许不同的返回类型,所以我有点卡在这里。 (最初我绘制下面的 UML 来模拟我的意图。)
很多人要求我展示真正的问题。这是一个全局视图:
这是一个机器学习者。 Attr 是数据集中实例的一部分:DataSet 由 Ins(实例)的列表组成。Ins 由 Attrs 的列表组成,Attrs 的计数和每个 Attr 的类型在运行时是已知的,从用户提供的带有命令行参数的数据文件中解析。
给你:
【问题讨论】:
-
你可以使用模板。
-
我建议返回 boost any 或 boost variant。
-
您能说明您要解决的真正问题以及使用
Attr的上下文吗? C++ 是强类型的,不直接支持您想要做的事情,但根据实际需要,您可以使用各种机制(可能是静态或动态多态性)。 -
@MarkB 更像是静态类型的。
-
@MarkB 请查看更新。