本日の関数オブジェクトはOpenGLがらみ

今日の発明はこれ。

  struct MyGlVertex3fv
  {
    void operator()( const Vec3& v ) const { glVertex3fv( v.V() ); }
  };

例えばこう使う(↓)

vector< Vec3 > vv;
for( int i=-10; i<=10; ++i ){
  vv.push_back( Vec3( -10, i*.08, 0 ) );
  vv.push_back( Vec3( +10, i*.08, 0 ) );
  vv.push_back( Vec3( i*.08, -10, 0 ) );
  vv.push_back( Vec3( i*.08, 10, 0 ) );
}// i
// があったとしてー、
glBegin( GL_LINES );
{
  std::for_each( vv.begin(), vv.end(), MyGlVertex3fv() );// ★
}
glEnd();

↑これって何かよくないすか。なんつーかこう、★の一行で書けてしまうという書き方が。ごちゃごちゃしてないし。他にも例えば、

  struct MyGlNormal3fvVertex3fv{
    void operator()( const MyVertex* ivtx ) const 
    { 
      glNormal3fv( ivtx->Normal().V() );
      glVertex3fv( ivtx->Position().V() );
    }
  };

などとも持っておくと、便利なことありそうな予感。

glBegin( GL_TRIANGLE_STRIP );
{
  std::for_each( vtxVec.begin(), vtxVec.end(), 
                             MyGlNormal3fvVertex3fv() );// ★
}
glEnd();

とか書けてあまりにもコードが見やすいっすー。
そんだけ。