セッター/ゲッターを簡単に定義したい場合は、シングルメンバーレベルで作成してください。setter / getterを使用してメンバーテンプレートを作成し、それをクラスのパブリック要素として定義します。
template <class Type>
class Member {
public:
Member(const T& value = T()) : value(value) {}
void setValue(const Type& t) { value = t; }
T getValue() const { return value; }
private:
T value;
};
あなたのクラスでそれを使用してください:
class Person {
public:
Member<std::string> firstName;
Member<std::string> lastName;
Member<std::string> address;
Member<unsigned> age;
};
そして使用法:
int main() {
Person one;
one.firstName.setValue("Joe");
one.age.setValue(33);
}
いくつかの制約(範囲チェックなど)が必要な場合は、RangeCheckingMemberテンプレートを定義します。メンバーを相互に依存させる必要がある場合は、ポインター/参照によってメンバー間の関係を作成します。