「std::mem fn」の版間の差分

提供: C++入門
移動: 案内検索
(ページの作成:「関数テンプレート std::mem_fn とは、ポインタを通してメンバにストア、コピー、実行をするオブジェクトのメンバへのポイ...」)
 
(相違点なし)

2013年12月28日 (土) 22:24時点における最新版

関数テンプレート std::mem_fn とは、ポインタを通してメンバにストア、コピー、実行をするオブジェクトのメンバへのポインタをラッパー生成します。

読み方

std::mem_fn
えすてぃーでぃー めむ えふえぬ

概要

std::mem_fnは、メンバ変数・メンバ関数へのラッパーを作成します。

ヘッダファイル

#include <functional>
// C++11
template< class R, class T >
/*unspecified*/ mem_fn(R T::* pm);
 
// C++11 - C++14
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...));
template< class R, class T, class... Args >
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) volatile);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const volatile);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) &);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const &);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) volatile &);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const volatile &);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) &&);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const &&);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) volatile &&);
template< class R, class T, class... Args > 
/*unspecified*/ mem_fn(R (T::* pm)(Args...) const volatile &&);

mem_fn.cpp の例

ソースコード mem_fn.cpp

#include <iostream>
#include <functional>
using namespace std;
class Foo {
        private:
        public:
                int     data;
                Foo () :data(7) {}
                void display_hello () {
                        cout << "Hello" << endl;
                }
                void display_number(int i) {
                        cout << "Number: " << i << endl;
                }
};
int main(int argc, char const* argv[])
{
        Foo     f;
        auto hello = std::mem_fn(&Foo::display_hello);
        auto number = std::mem_fn(&Foo::display_number);
        auto data = std::mem_fn(&Foo::data);
 
        hello(f);
        number(f,123);
        cout << data(f) << endl;
        return 0;
}

コンパイル

g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \
-Wl,-rpath=/usr/local/lib/gcc49  mem_fn.cpp -o mem_fn

実行例

% ./mem_fn
Hello
Number: 123
7

関連項目