可以使用模板来默认实现 getter-setter。
例如 - http://www.kirit.com/C%2B%2B%20killed%20the%20get%20%26%20set%20accessors/A%20simple%20meta-accessor。最重要的是,如果您决定覆盖此类 setter 或 getter 的默认行为,则无需更改“客户端”代码即可轻松执行此操作,因为 setter-getter 调用语法与调用方法相同,即:
an_object.an_int( 3 );
int i = an_object.an_int();
在这两种情况下,an_int 都可以是带有 operator() 的对象或 an_object 的方法。在“客户端”代码中将需要重写后重新编译。
但是是否可以在没有预处理器宏的情况下为 getter-setter 定义“虚拟”默认实现?即这里重要的是,在“客户端”代码的覆盖重新编译期间不需要。当然可以使用预处理器,我想知道有没有更优雅的解决方案?
对于我的 C++03 知识是不可能的,但也许有人有一些想法,或者在 C++11 中是可能的?
“David Rodríguez - dribeas”的答案:像这样:
#define accessor(type,name) \
virtual type name() {return m_##name;} \
type m_##name;
它可以在派生类中被覆盖,而无需重新编译“客户端”代码。