2010-11-30

C++のINVOKEの仕様

std::funcitonやstd::bindは、20.8.2 Requirements [func.require]で定義されているINVOKEの仕様に従う。つまり、メンバー関数やデータメンバーも扱える。

struct Foo
{
    void f() { }
    int x ;
} ;

int main()
{
    Foo foo ;
    // メンバー関数
    std::function< void ( Foo & ) > f( &Foo::f ) ;
    f( foo ) ; // foo.f() と同じ

    // データメンバー
    std::function< int & ( Foo & ) > x( &Foo::x ) ;
    x( foo ) = 0 ; // foo.x = 0 と同じ
}

もしかして、意外と知られていないのだろうか。

1 comment:

  1. データメンバーは知らなかった!

    ReplyDelete

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.