次の方法で共有


mem_fn 関数

単純な呼び出しラッパーを生成します。

template<class Ret, class Ty>
    unspecified mem_fn(Ret Ty::*pm);

パラメーター

  • Ret
    ラップされた関数の戻り値の型。

  • Ty
    メンバー関数ポインターの型。

解説

このテンプレート関数は、弱い結果型を持つ、単純な呼び出しラッパー cw を返します。つまり、式 cw(t, a2, ..., aN) は INVOKE(pm, t, a2, ..., aN) と同じ意味になります。 例外は一切スローされません。

返される呼び出しラッパーは、型 Ty が、引数を受け取らない cv 修飾子 cv を持つメンバー関数へのポインターである場合にのみ、std::unary_function<cv Ty*, Ret> から派生されます (そのため、入れ子にされた型 result_type を Ret のシノニムとして定義し、入れ子にされた型 argument_type を cv Ty* のシノニムとして定義しています)。

返される呼び出しラッパーは、型 Ty が、型 T2 の引数を 1 つだけ受け取る cv 修飾子 cv を持つメンバー関数へのポインターである場合にのみ、std::binary_function<cv Ty*, T2, Ret> から派生されます (そのため、入れ子にされた型 result_type を Ret のシノニムとして定義し、入れ子にされた型 first argument_type を cv Ty* のシノニムとして定義し、入れ子にされた型 second argument_type を T2 のシノニムとして定義しています)。

使用例

 

// std_tr1__functional__mem_fn.cpp 
// compile with: /EHsc 
#include <functional> 
#include <iostream> 
 
class Funs 
    { 
public: 
    void square(double x) 
        { 
        std::cout << x << "^2 == " << x * x << std::endl; 
        } 
 
    void product(double x, double y) 
        { 
        std::cout << x << "*" << y << " == " << x * y << std::endl; 
        } 
    }; 
 
int main() 
    { 
    Funs funs; 
 
    std::mem_fn(&Funs::square)(funs, 3.0); 
    std::mem_fn(&Funs::product)(funs, 3.0, 2.0); 
 
    return (0); 
    } 
 
  

必要条件

ヘッダー: <functional>

名前空間: std

参照

関連項目

function クラス