« VisualStudio 6.0SP6 で ProcessorPack | メイン | ゾンビプロセス? »

C++ の次はなんなんだ その 2

名前つきブロック
foo() {
    named block1 {
        while ( 1 ) named block2 {
            exitfrom block1;
        }
        ::std::cout << "never print" << ::std::endl;
    }
}
 while はループにも名前を付けられるって事を示したかっただけで、コード上の意味は無い。named は冗長だからいらないかも。

template タイプ (またはエイリアス)
template< typename T > typedef ::std::vector< T >  myVec;
 ただ別名が付けられるだけ。略したいなら using しろよってツッコミもアリ。
 class の継承で実現可能だけど、コンストラクタとか operator とか隠滅されるから手軽には出来ない。マクロは namespace 使えないし論外。

動的なクラス名の保持
Expression Template とかで、
CBar bar = (a + b * c) / 2;
みたいな計算式を書くと、template で動的に膨れ上がった、ツリー状のクラスが生成される。bind も同じ現象。
 そのクラス名は不定のため、bar のクラス名を決定する事は出来ない。CBar のコンストラクタを
template< class T > CBar( T value )
としたところで、T を保持しておく機構が無いので、bar を次の演算に使おうにも型が分らない。
 boost の function を使っても、戻り値の型を決めてやらないといけない。次の演算にも ET を連結しようとすると、戻り値の型は function に渡した時の型そのものが必要になるので、やはり分らない。かといって ET の連結を諦めて、そこで ET を解決してしまうと、全要素の演算が発生するので ET の意味が半減する。

※Expression Template
 divide< add< mult > > みたいな感じで演算式を全てテンプレートに変換してしまう手法。
 配列演算に用いてもテンポラリな配列を必要とせず、線形であれば同じ要素を 2 度読む事も無い。そして配列同士の演算の後、実際に使用するのがたかが数要素なのであれば、ET の解決時に使用する要素だけの演算になる。よって、よく配列演算の最適化に使われる。

トラックバック

このエントリーのトラックバックURL:
http://yoffy.dyndns.org/cgi-bin/mt/mt-tb.cgi/135

コメントを投稿

About

2004年10月15日 20:27に投稿されたエントリーのページです。

ひとつ前の投稿は「VisualStudio 6.0SP6 で ProcessorPack」です。

次の投稿は「ゾンビプロセス?」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.37