Warum kann ich std :: set nicht mit einer Instanziierung eines Prädikats konstruieren, aber ich kann ein std :: set zuweisen, das auf diese Weise konstruiert wurde?

8

Also habe ich ein Array (0 - n), das Werte enthält, die ich mit std :: set für die Sortierung verwenden möchte. Das Array ist unsigned int Kosten [n] .

Ich verwende den folgenden Funktor für diese Sortierung:

%Vor%

Also hier ist das Problem ... Wenn ich die Menge konstruiere, ist das legal:

%Vor%

Ich bekomme keine Fehler, und alles funktioniert wie erwartet. Aber das scheint gehackt und schlampig.

Dies ist jedoch anscheinend illegal:

%Vor%

Der Versuch, es einfach mit dem ProxySorter (Kosten) zu konstruieren, verursacht eine Reihe von Fehlern, die für jeden Aufruf von set member so etwas aussagen:

  

error: Anforderung für das Löschen von Elementen in node_queue, die von   Nichtklassentyp std :: set & lt; unsigned int, ProxySorter & gt; (ProxySorter)

Was ist das Problem mit der regulären Konstruktion? Warum funktioniert die Aufgabe? Was ist der Unterschied hier, den ich vermisse? Jede Hilfe sehr geschätzt, danke.

Oh und tut mir leid wegen des Titels der Frage, ich war nicht wirklich sicher, wie ich das nennen soll.

    
Robert Kelly 21.11.2011, 03:49
quelle

1 Antwort

13

Most-vexing-parse . Sie benötigen ein weiteres Klammerpaar:

%Vor%

Andernfalls wird dies als Deklaration einer Funktion interpretiert, die Ihren Settyp zurückgibt und ein Argument vom Typ ProxySorter namens cost .

verwendet     
Xeo 21.11.2011, 03:53
quelle

Tags und Links