我最近遇到了使用配置對象而不是通常的setter方法進行配置的類。一個小例子:配置結構vs設置器
class A {
int a, b;
public:
A(const AConfiguration& conf) { a = conf.a; b = conf.b; }
};
struct AConfiguration { int a, b; };
有利的一面:
- 你可以擴展你的對象,並輕鬆地保證新值合理的默認值,而用戶永遠需要去了解它。
- 您可以檢查配置是否一致(例如,您的類只允許某些值的組合)
- 您可以通過省略setter來節省大量代碼。
- 您將獲得一個默認構造函數,用於指定Configuration結構的默認構造函數並使用
A(const AConfiguration& conf = AConfiguration())
。
缺點(S):
- 你需要知道在施工時間的配置和不能改變它以後。
是否有更多的缺點,我錯過了?如果沒有:爲什麼這不是更頻繁使用?
我最近遇到了一箇舊的代碼庫,我支持。這很煩人。 – 2009-11-12 16:23:12
Windows API通過添加一個大小字段,確保結構是POD,並且只在最後附加數據字段來做到這一點。添加支持舊的構造函數來創建新的結構(新字段具有合理的默認值),兼容性實際上是_increased_。 – sbi 2009-11-12 16:31:52
我寫了一個鏡像答案,在那裏我顯示兼容性增加了。 – 2009-11-12 16:33:43