gpt4 book ai didi

c++ - 一个成员函数的设计问题

转载 作者:行者123 更新时间:2023-11-30 01:53:54 25 4
gpt4 key购买 nike

一个基类有一个带有这个签名的成员函数

virtual void method(A &a, B &b, C &c, D& d);

用户定义了一个重写此方法的派生类。

我们发现方法代码具有误导性,因为它的设计很糟糕:

  • a 只是一个输入,不应该被修改
  • b 只是一个输出,必须设置
  • c只是一个输出,可以设置也可以不设置
  • d 同时是一个输入和输出,所以它应该被读取并且可以在方法内部设置一个值。

其余代码将使用给定 b 的值,如果已设置,则将从 c 和 d 的值中获益。

显然这是一个糟糕的设计,例如 a 应该被声明为 const

问题:

  1. 对象 b、c 和 d 呢?以考虑到不同行为的方式声明此方法是否是更好的方式?

  2. 我们应该如何弃用此方法并替换它而不影响当前使用此方法的代码?

最佳答案

C++ 没有为此提供任何方便的工具,就像其他一些语言一样(例如在 C# 中,refout[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 引用更好的了。

至于将其标记为已弃用,您可以做的最好的事情就是在其上发表评论,或者在函数运行时向控制台或日志文件打印出“我已弃用,不要使用我”警告消息被使用。

关于c++ - 一个成员函数的设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22637335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com