2016-11-06 5 views
-1

私はC++ 11の新機能で、Functorについてはthisの記事を読んでいます。これは非常に役に立ちました。ただ1つの変数以上の関数を受け取るファンクタを作ることが可能だと思いました? は、例えば、我々は、以下のクラスを持っている:2つ以上の変数を持つFunctor

class my_functor{ 
public: 
    my_functor(int a,int b):a(a),b(b){} 

    int operator()(int y) 
    { 
     return a*y; 
    } 

private: 
    int a,b; 

}; 

今、私は不思議私たちは

operator()(int y) 

が、2以上のと同じようにメンバ関数を作ることができるどのような方法があるの(または未知の数字が!)変数は受け取っていますか?

+5

確かに、どうしてですか?明白なアプローチがうまくいくはずです。試してみるときに特定の問題に直面していますか? – hvd

+0

'operator()'はあなたが書き留める多くの引数を受け取るばかりの関数名です。 – Deduplicator

答えて

0

はい。 operator()にあなたが望む数の引数を渡すことができます。例えば参照:

#include <iostream> 
class my_functor{ 
public: 
    my_functor(int a,int b):a(a),b(b){} 

    int operator()(int y) 
    { 
     return a*y; 
    } 

    int operator()(int x, int y) 
    { 
     return a*x + b*y; 
    } 

private: 
    int a,b; 
}; 

int main() 
{ 
    my_functor f{2,3}; 
    std::cout << f(4) << std::endl; // Output 2*4 = 8 
    std::cout << f(5,6) << std::endl; // Output 2*5 + 6*3 = 28 
    return 0; 
} 

は、引数の数が不明な処理するには、引数(基本的には、#include <varargs.h>、またはテンプレートパラメータパック)の可変数を処理するための様々なソリューションを見てする必要があります。

+0

よろしくお願いいたします。私は間違いを犯し、 "operator(、)(int x、int y)"のような関数ヘッダを書いていることを知りました。 –

関連する問題