【发布时间】:2017-02-10 05:01:56
【问题描述】:
假设我有一个函数 foo,它需要两个不同类型的非原始对象,例如:
void foo(House h, Dog d) {// implementation }
假设这些参数的放置对函数输出没有影响,那么理论上 foo(h,d) = foo (d,h)。但是 c++ 不允许这样做,除非我通过以下方式重载此函数:
void foo (Dog d, House h) {// implementation }
但是如果参数的数量增加,这种重载就会让人头疼(例如,6 个重载用于 3 个参数等等)。
我的问题是,有没有什么简单的方法可以在不重复重载的情况下实现不按特定顺序传递参数的便利?
【问题讨论】:
-
只是出于好奇,为什么有人想以错误的顺序将参数传递给函数?
-
为什么需要这种灵活性?如果你构造它,你可以按照定义的顺序传递它们。
-
如果您知道该函数需要 3 种不同类型的参数,那么以任何顺序传递它们而不是检查函数原型会不会很方便?
-
将所有这些参数封装在一个对象中,并将对象引用传递给函数。
-
这不是重点!从数学上讲,如果 f(x,y) 的输出与 f(y,x) 相同,我为什么要关心参数的正确顺序?
标签: c++ function overloading