|
|
1
2
不,不能使用虚拟“value”函数在对象中写入toString并重写返回类型。然而,您可以编写一个虚拟toString,并使用模板编程技巧完成几乎相同的任务。
|
|
2
8
在C++中重写虚拟函数时,有可能改变返回类型吗?只有在非常有限的情况下,指针或引用返回类型才能协变。 这个问题有什么好的解决办法吗?好吧,有两个相当好的解决方案,一个稍差的解决方案。 我给你一个稍微不好的解决方案。我给出的一个原因是它很容易理解,或者至少它很容易“复制和修改”,即使一个人不太理解它。另一个原因是,一个好的解决方案需要一些广泛的一般性支持机制,这里没有讨论的余地,而另一个好的解决方案(在我看来,它在几乎所有方面都是最好的)是这样的,至少当我提出这种解决方案时,它自动地以否决票获得了支持只有这个,就这样。我想这是为多样性付出的代价,多样性是一件非常好的事情:-)但是,不幸的是,这意味着提供真正好的东西是没有意义的,那我就只能说是消极的。 无论如何,代码,基于虚拟继承中的支配地位;这与用Java或C继承接口的实现差不多:
如果你的
编辑 :现在我明白了,您已经接受了一个答案,这基本上只是我关于模板化的最后一个建议。这意味着我已经回答了提出的问题(一个针对不同类的解决方案),而你却有一些不太一般的想法。哦,好吧。 干杯。, |
|
|
3
1
不幸的是,不能用返回值重载C++中的函数。如果你有合适的
|
|
|
4
0
不能用不同的返回类型重写函数;最接近的方法是在父类中用派生类中的不同类型隐藏函数。但这不是你想要的,因为这两种功能是不同的,完全不相关的。
你认为你需要创建一个新的
|
|
|
5
0
我认为你的做法不对。虽然在某些情况下可以更改虚拟函数的返回类型,但请考虑以下问题:如何使用您的函数?如果是虚拟的,则更改为用户将使用基类。因此,他们不知道你的类的实际类型是什么,因此他们不知道期望的类型是什么。所以:
|
|
|
6
0
关于@MerickOWA comment,这里有另一个解决方案,它不需要任何额外的模板机制。 因为您打算在所有类中实现一个虚拟的“value()”方法,所以我扩展了这个想法(通常,在这种框架中,您有很多类似的“基本”方法,所以我使用宏来为自己编写它们,这不是必需的,只是更快,更不容易出错。
显然,技巧在于std::ostringstream类接受任何参数类型(long long、long等)。既然这是标准的C++实践,那就不重要了。 |