【发布时间】:2016-05-24 10:15:43
【问题描述】:
我发现,在编写 C++ 代码时,我花了很多时间编写访问器样板代码,例如:
class A
{
int x;
public:
auto x();
void set_x(decltype(x));
};
实现访问器的整个想法围绕着能够拦截对它们的读写访问。我偶然发现了this 库(我不是作者)。这真的让我想知道,如果为了避免编写样板代码,可以/应该只写如下内容:
class A
{
public:
property<int> x;
A() {
x.setter([this](int){ /* setter code */ });
}
};
我的问题是:有哪些技术可以避免为 getter 和 setter 编写大量样板代码?
【问题讨论】:
-
这是基于意见的,但是如果您在您提供的链接中查看
property的实现,您会发现它增加了很多开销......如果您这样做可能没问题正在构建 UI,但如果您正在做一些核心编程,则不会。另外,在我(主观)看来,如果你在任何地方都重载了operator=,就更难阅读代码了。 -
我并没有特别提到这个库,这只是一个例子,
property<>的实现是任意的。 -
为什么首先需要所有这些 getter 和 setter?序列化?
-
@user1095108 “使用访问器而不是直接公开类的字段”有很好的论据,但通常都没有必要,许多人认为这是一种反模式。如果有一些真正的程序逻辑(例如带有一些验证的设置器),我不会将其视为样板。
-
@mkluwe 同意。此外,由于POLA,将具有真实程序逻辑的函数命名为 getX() 或 setX() 是一个坏主意。
标签: c++ getter-setter boilerplate