「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