基类具有带此签名的成员函数
virtual void method(A &a, B &b, C &c, D& d);
用户定义一个覆盖此方法的派生类。
我们发现方法代码具有误导性,因为它的设计很糟糕:
其余的代码将使用给定给b的值,并且如果已设置,将从c和d的值中受益。
显然这是一个糟糕的设计,例如a应该声明为 const 。
问题:
对象b,c和d怎么样?他们是一种以考虑不同行为的方式声明这种方法的更好方法吗?
我们应该如何弃用此方法并替换它而不影响当前使用此方法的代码?
答案 0 :(得分:2)
我会绕过"虚假限制"它必须是一种单一的方法:显然这是不正确的,因为要求似乎差别很大。
分为多个方法,参数数目不一,当然还有合适的参数名称。
答案 1 :(得分:2)
C ++没有提供任何方便的工具,就像其他一些语言一样(例如在C#,ref
,out
,[Obsolete]
标签中。
我看到有些人这样做了,但是:
#define in
#define out
#define optional
// DEPRECATED
virtual void method(const A& a, out B& b, optional out C& c, in out D& d);
这当然没有任何行为不同,对编译器没有任何意义,它只是人类读者的美好。
除此之外,我认为制作第一个参数const
是关于你能做的最好的。从语义上讲,没有什么比将它们留给非const引用更好了。
至于标记它已被弃用,你可以做的最好就是对它进行评论,或者打印出一个“我不赞成,不要使用我”警告消息到控制台或日志文件时的功能使用。