【发布时间】:2011-02-28 04:57:33
【问题描述】:
是否有任何工具可以自动为类生成 set 和 get 方法。
只是我非常频繁地创建类,并希望有一个工具可以为每个类成员自动生成以下功能:
Member_Type getMemberName() const; //in header file
Member_Type getMemberName() const //in source file
{
return member;
}
void setMemberName(const Member_Type & val); //in header
void setMemberName(const Member_Type & val) //in source file
{
member = val;
}
我遇到过这样的宏,但不喜欢这个主意:
#define GETSETVAR(type, name) \
private: \
type name; \
public: \
const type& get##name##() const { return name; } \
void set##name##(const type& newval) { name = newval; }
可能有人知道如何使用 MS Visual Studio 或任何其他工具来做到这一点?
【问题讨论】:
-
如果您希望您的所有成员都可以公开修改(并且如果您这样做,您的类不提供任何抽象)为什么不将它们公开?
struct默认执行此操作。 -
以下问题的许多答案都是相关的:stackoverflow.com/questions/2977007/…。底线:你可能认为你想要这个,但这通常是一个糟糕的主意。
-
@Narek:如果 OOP 实践要求您做一些愚蠢的事情,那么也许 OOP 不是正确的选择? OOP 是达到目的的一种手段,而不是其本身的目标。目标应该始终是好的、干净的代码。通过将代码大小增加四倍并为 everything 编写 getter/setter 是无法做到这一点的。 (除此之外,这样做通常也不是好的 OOP 实践。类应该公开对类有意义的逻辑操作。get/set 通常不是有意义的操作,它们只是修改内部的快捷方式类。
-
@Narek:一个充满getter和setter的类是OO的对立面。
-
您要求更好的解决方案:不要那样做!根据类是什么和表示什么以及类不变量是什么来实现有意义的函数。自动生成 getter 和 setter 会暴露内部实现,违反封装。