gpt4 book ai didi

c++ - 配置结构与 setter

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:37 25 4
gpt4 key购买 nike

我最近遇到了使用配置对象而不是通常的 setter 方法进行配置的类。一个小例子:

class A {  
int a, b;
public:
A(const AConfiguration& conf) { a = conf.a; b = conf.b; }
};

struct AConfiguration { int a, b; };

优点:

  • 您可以扩展您的对象并轻松保证新值的合理默认值,而您的用户根本不需要知道它。
  • 您可以检查配置的一致性(例如,您的类只允许某些值的组合)
  • 通过省略 setter 可以节省大量代码。
  • 您获得一个默认构造函数,用于为您的配置结构指定默认构造函数并使用 A(const AConfiguration& conf = AConfiguration())

缺点:

  • 您需要在构建时了解配置,以后不能更改。

是否还有其他我遗漏的缺点?如果没有:为什么不更频繁地使用它?

最佳答案

是单独传递数据还是按结构传递数据是一个风格问题,需要根据具体情况来决定。

重要的问题是:对象在构造后是否准备就绪并可用,编译器是否强制您将所有必要的数据传递给构造函数,或者您是否必须记住在构造后调用一堆 setter,其数量可能会增加任何时候,编译器都不会提示您需要调整代码。那么这是否是

 A(const AConfiguration& conf) : a(conf.a), b(conf.b) {}

 A(int a_, int b_) : a(a_), b(b_) {}

没那么重要。 (有许多参数,每个人都更喜欢前者,但这是多少 - 以及这样的类是否设计良好 - 值得商榷。)但是,我是否可以像这样使用对象

A a1(Configuration(42,42));
A a2 = Configuration(4711,4711);
A a3(7,7);

或者必须这样做

A urgh;
urgh.setA(13);
urgh.setB(13);

在我可以使用该对象之前,确实产生了巨大的变化。尤其是当有人出现并将另一个数据字段添加到 A 时。

关于c++ - 配置结构与 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1723419/

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