2 votes

Objets de fonction définis en C++

En gros, je veux créer un ensemble d'objets Fonction. En python, si nous faisons :

def func():
    print "a"

a = func
b = func
fset = set()
fset.insert(a)
fset.insert(b)

Dans ce cas, fset n'aura qu'une seule fonction puisque a et b sont identiques en python. Mais en C++, si je crée des objets fonction pour la même fonction, a et b seront deux objets différents d'un ensemble. Existe-t-il un moyen pour que deux objets de la même fonction soient identiques ?

En C++ :

void func(){
    cout << "a";
}

function<void()> a = bind(func);
function<void()> b = bind(func);

Maintenant, je veux que si a ou son pointeur est déjà présent dans l'ensemble, b ne doit pas être ajouté.

1voto

JeJo Points 12135

Si vous n'avez que des fonctions void (ou si toutes les fonctions ont la même signature), utilisez simplement des pointeurs de fonction de type C comme std::sets Le type de modèle de l'utilisateur.

Cela fonctionnera et, en plus, il n'y a pas de frais d'effacement de type de std::function .

void func() {}
void func2() {}

using fPtrType = void(*)(); // convenience type  

int main()
{
    std::set<fPtrType> fset;
    fPtrType a = func;
    fPtrType b = func;
    fset.emplace(a);
    fset.emplace(b);
    fset.emplace(func2);

    std::cout << fset.size();  // prints 2
    return 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X