C++ Templatesに載っているExpression Templateの実装は、嫌いだった。物凄く面倒なのだ。これを実装するぐらいだったら、自前でループを書いたほうが、まだましだろう。
ところで、C++ Template Metaprogrammingを読んでいると、より分かりやすい方法が見つかった。C++ Templatesに載っている方法は、各種演算のための参照でラップするクラスと、演算子をオーバーロードするテンプレート関数があったのだが、C++ Template Metaprogrammingのサンプルでは、この演算方法を、テンプレートパラメータとしていた。
struct plus
{
static float apply(float a, float b)
{ return a + b ; }
} ;
struct minus
{
static float apply(float a, float b)
{ return a - b ; }
} ;
template < typename L, typename OpTag, typename R >
struct Expression
{
Expression(L const & l, R const & l)
: l(l), r(r) { }
float operator[](unsigned index) const
{ return OpTag::apply(l[index], r[index]) ; }
L const & l ;
R const & r ;
} ;
template < typename L, typename R >
Expression<L, plus, R> operator + (L const & l, R const & r)
{
return Expression<L. plus, R>(l, r) ;
}
なんて分かりやすいんだろう。C++ Templatesの実装では、Expression_Addとか、Expression_Subなどをそれぞれ用意しなければならないが、こうすると、かなり分かりやすくなる。なぜ今まで思いつかなかったのだろう。分かってしまうと単純なのに、自力で発見することはできない。コロンブスの卵というやつだろうか。
XpressiveにProtoという
ReplyDeleteサブコンポーネントがあります
これは意外と読みやすいのでお勧めです。
P.S.
ここはコメントつけるのにえらい苦労する
俺意外コメントしねえよここはクソだ
うーん、コメント機能以外は気に入っているんのですが。
ReplyDelete別ウインドウが開くというのは、タブブラウザ主流の近年の傾向と逆行している気がします。
Xpressiveですか。CVSから引っ張ってこないといけませんね。1.34はいつリリースされるのだろう。
ポップアップウインドウではないようにしてみました。
ReplyDeleteでも、あまり使い勝手は良くならないようです。
Google傘下ともあろうブログサービスが、なぜこんな貧弱なサービスなんでしょうね。
う、すいません
ReplyDeleteパスワード入れるのがめんどうで
酔ってついつい切れたようです
シラフの私はいい人です
本の虫さんは好きです
Cryoliteさんは嫌いです 笑
googleのアカウントがなくてもコメントできる設定にしているはずですが。
ReplyDeleteしかし、元の記事へのリンクが表示されないのはなんともお粗末。
やはりポップアップのほうがましでしょうか。
はっはっは
ReplyDeleteそれに今気づいた 笑