我可以在一个方法中用C++组合setter和getter吗?

yeg*_*256 3 c++

我想在一个方法中用C++组合setter/getter,以便能够执行以下操作:

Foo f;
f.name("Smith");
BOOST_CHECK_EQUAL("Smith", f.name());
Run Code Online (Sandbox Code Playgroud)

我不知道如何在Foo类中声明这样的方法:

class Foo {
public:
  // how to set default value??
  const string& name(const string& n /* = ??? */) {
    if (false /* is it a new value? */) {
      _name = n;
    }
    return _name;
  }
private:
  string _name;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一些优雅的解决方案,具有真正的C++精神:)谢谢!

Ber*_*ron 6

class Foo {
public:

  const string& name() const {
    return name_;
  }

  void name(const string& value) {
    name_ = value;
  }

private:
  string name_;
};
Run Code Online (Sandbox Code Playgroud)

  • 警惕`_`,即使在这里似乎没问题,标准禁止使用下划线标识许多标识符.从我的头顶:任何带有双下划线的标识符和任何以下划线开头后跟大写字母的标识符......但我可能会忘记一些. (5认同)