2011-12-17 6 views
0

関数オブジェクト、それは私がそれを見て私の最初の時間、およびそれについての例を発見し、それがどのように仕事unary_functionと関数オブジェクト

//function object example 
#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 
//simple function object that prints the passed argument 
class PrintSomething 
{ 
public: 
void operator() (int elem) const 
{ 
cout<<elem<<' '; 
} 
} 
; 
int main() 
{ 
vector<int> vec; 
//insert elements from 1 to 10 
for(int i=1; i<=10; ++i) 
vec.push_back(i); 
//print all elements 
for_each (vec.begin(), vec.end(), //range 
PrintSomething()); //operation 
cout<<endl; 
} 

出力です:0 1 2 3 4 5 6 7 8 9

私は関数オブジェクトの構文を理解していますが、この例ではこのテクニックを使用するには深刻な問題はありません。私は関数オブジェクトを使うべきですか?

誤っによって私はunary_functionを発見し、私はそれについての例(unary_function)を発見し、例としては、同一の一致を見て:

// unary_function example 
#include <iostream> 
#include <functional> 
using namespace std; 

struct IsOdd : public unary_function<int,bool> { 
    bool operator() (int number) {return (number%2==1);} 
}; 

int main() { 
    IsOdd IsOdd_object; 
    IsOdd::argument_type input; 
    IsOdd::result_type result; 

    cout << "Please enter a number: "; 
    cin >> input; 

    result = IsOdd_object (input); 

    cout << "Number " << input << " is " << (result?"odd":"even") << ".\n"; 

    return 0; 
} 

outputs : 
Please enter a number: 2 
Number 2 is even. 

これはunary_functionを有するテンプレート関数オブジェクトであるという意味であります特定の議論番号? 私自身の関数オブジェクトを定義したり、自分のクラスでunary_functionを使うことができます。

ありがとうございました!

+0

関数オブジェクトが好きなら、おそらく[boost :: function](http://www.boost.org/doc/libs/1_48_0/doc/html/function.html)が好きでしょう。 – Lalaland

答えて

0

実際、unary_functionは、宣言された演算子()を持たないため、関数オブジェクトでさえありません。引数型と結果型のtypedefを単純化するためにのみ提供されています。私はあなたのプログラムでそれが必要だとは思わない。

関数に渡されるデータだけでなく、関数が呼び出される前に保存されるべきデータが必要な関数オブジェクトが必要です。

1

unary_functionは、呼び出し可能なクラスに関する型情報を公開するヘルパーテンプレートです。これは、バインディングや合成のようないくつかのC++ 11以前の関数の構造体で使用されています。unary_functionbinary_functionの基本クラスのtypedefで決まる、一致する型だけをバインドしたり作成することができます。

可変長テンプレートはより汎用的なアプローチを提供し、新しいstd::functionstd::bindを使用すると、C++ 11よりも前にやることができるすべてのことを厄介な構造で行うことができるため、これは廃止されました。多く、はるかに多く。

関連する問題