ライブラリベースのプロパティ

http://lists.boost.org/MailArchives/boost/msg74302.php
(boost.devel 2004/11/08~)
あとで読もうっと.

読んだ

にゅにゅにゅ.なんか予想以上に面白そう.というかまともに実装されるなら普通に( ゜д゜)ホスィ…ぞ,これ.っていうか,見ている限り自分でもぺぺぺっと実装出来そうだし(しかしこの予測だけはいつもだいたい外れる).
今日仕事の合間に自分がライブラリベースのプロパティを実装するならどうするだろうと考えていた.肝要なのはクラス提供者がどれだけ楽できるかと,ユーザがいかに柔軟にプロパティにアクセスできるかだと考えて,でもちょっと難しいんじゃないかと思っていた.なので夜帰ってarticle読むまでは全然期待していなくて,やっぱ言語レベルでサポートしてくれるのが良いのかなぁと思っていたんだけれど,実際article読むと意外と簡単に実装しててちょっと悔しい.
articleによると,クラス提供者の側で

class C
{
public:
  Property<std::string> Name;
};

とするだけで,ユーザの側では

C c;

// メンバ変数的なアクセス
c.Name = "Cryolite";
std::cout << c.Name << std::endl;

// get/setによるアクセス
c.Name.set("Cryolite");
cout << c.Name.get() << endl;

// メンバ関数による(ように見せかけた)アクセス
c.Name("Cryolite");
std::cout << c.Name() << std::endl;

の冗長なアクセス手段が可能になると主張している.む〜,なんでこんな簡単な実装思いつかなかったんだろう・・・って感じ.
もちろん,read-only, write-onlyなプロパティ,pseudo-member(直接対応するメンバ変数が無いプロパティ.正確な用語知らない・・・orz)なども議論されている.articleの実装だとpseudo-memberのはクラスコンストラクタで初期化が必要なのが気に食わないけれど,多分Boosterの手にかかればCRTP + chained inheritanceとかで「継承すれば2分でプロパティ」な実装とかぶちかましてくれるかも.知らんけど.
こうなってくると,policy-baseで提供するインターフェースを調節するとか色々夢が広がってきて,言語レベルで対応するよりもライブラリベースで提供するほうがむしろ楽しいんじゃないかとすら思えてきた.まぁ,細かい部分は全然考えてないので何か見落としはあるだろうけれど.
これも早く実装されないかなo(^-^ o )わくわく.
#って,sandboxに放り込んだって書いてあるじゃん.