昨日のわんくま同盟東京勉強会#71、いっぱいのお運びありがとやんした。
で、「新潟」なんだが。
おハナシ聴いて思い出した件:
8年ほど前、C++標準員会に「C++にプロパティを導入せぇへん?」
てゆープロポーザル:N1615が投げられてます。
こいつで新潟を実現すると:
template<typename T, class Owner, typename T (Owner::*getter)()>
class niigata {
public:
void operator()(Owner* o) { owner_ = o; }
T get() const { return (owner_->*getter)(); }
T operator()() const { return get(); }
operator T() const { return get(); }
private:
Owner* owner_;
};
// おためし
#include <iostream>
#include <string>
using namespace std;
class Nyan {
private:
string get_name() { return name_; }
string name_;
public:
Nyan(const string& n) : name_(n) { Name(this); }
niigata<string,Nyan,&Nyan::get_name> Name; // ←ここで新潟
};
int main() {
Nyan c0("シュウたん");
Nyan c1("みずき");
string n0 = c0.Name;
cout << n0 << " & " << c1.Name() << endl; // ok: 読めるけど
// c0.Name = "マグさん"; // error: 書けない
}
...できてるー♪