2016-11-06 1 views
-1

Je suis un peu nouveau à C++ 11 et j'ai lu this post sur les foncteurs et il était très utile, je pensais juste qu'il est possible de faire un foncteur qui reçoit plus d'une seule variable ? par exemple, nous avons la classe ci-dessous:Functors avec deux variables ou plus

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; 

}; 

Maintenant, je me demande est-il possible que nous pourrions faire une fonction membre comme

operator()(int y) 

mais avec 2 ou plus (ou un nombre inconnu!) les variables sont-elles reçues?

+5

Bien sûr, pourquoi pas? L'approche évidente devrait fonctionner, êtes-vous confronté à un problème particulier lorsque vous l'essayez? – hvd

+0

'operator()' est juste un nom de fonction funky qui reçoit cependant de nombreux arguments que vous écrivez. – Deduplicator

Répondre

0

Oui. Vous pouvez passer autant d'arguments que vous le souhaitez à operator(). Voir par exemple:

#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; 
} 

Pour gérer un nombre inconnu d'arguments, vous avez besoin de regarder les différentes solutions pour traiter nombre variable d'arguments (essentiellement, #include <varargs.h> ou paquets de paramètres du modèle).

+0

wow merci !!! J'ai découvert que j'ai fait une erreur et écrit mon entête de fonction comme "operator (,) (int x, int y)" –