gpt4 book ai didi

C++ Get/Set 访问器 - 如何避免输入重复代码?

转载 作者:IT老高 更新时间:2023-10-28 21:48:50 45 4
gpt4 key购买 nike

我正在编写一个相当大的库,而且我发现自己一直在编写几乎相同的访问器。我已经有几十个访问器,如下面的那个。

问题:我怎样才能声明/实现访问器来省去输入所有这些重复的代码? (请不要 #defines;我正在寻找 C++ 构造。)

更新:是的,我确实需要访问器函数,因为我需要获取指向这些访问器的指针以获得称为属性描述符的东西,这可以大大节省我的 GUI 代码(非图书馆)。

.h 文件

private:
bool _visible;
public:
bool GetVisible() const { return _visible; }
void SetVisible (bool value);

// Repeat for Get/SetFlashing, Get/SetColor, Get/SetLineWidth, etc.

.cpp 文件

void Element::SetVisible (bool value)
{
_visible = value;
this->InvalidateSelf(); // Call method in base class
// ...
// A bit more code here, identical in 90% of my setters.
// ...
}

// Repeat for Get/SetFlashing, Get/SetColor, Get/SetLineWidth, etc.

最佳答案

I find myself writing almost identical accessors all the time. I already have several dozen accessors such as the one below.

这是一种确定的设计气味,您“为了它”编写访问器。你真的需要它们吗?你真的需要一个低级的公共(public)“get”和“set”操作吗?不太可能。

毕竟,如果您所做的只是为每个私有(private)数据成员编写一个 getter 和一个 setter,并且每个都有相同的逻辑,那么您还不如将数据成员公开。

相反,您的类(class)应该有有意义的语义操作,在他们的职责过程中,可能会或可能不会使用私有(private)数据成员。您会发现这些有意义的操作中的每一个都与其他操作完全不同,因此您的重复代码问题就迎刃而解了。

作为 n.m.说:

Easy: avoid accessors. Program your classes to do something, rather than have something.

即使对于那些对它们没有任何意义的操作,比如控制可见性,你也应该有一个 bool isVisible() const 和一个 void show(),并且void hide()。你会发现,当你开始像这样编码时,它会促使“为了它”getter & setter 远离样板。

关于C++ Get/Set 访问器 - 如何避免输入重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983420/

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