freie operatoren und namensbereiche
-
hi community
geht das?
struct rofl{}; namespace lol { bool operator== (rofl const& first, rofl const& second) {/**/}; } int main() { rofl r1, r2; r1 == r2; }der vergleichsoperator ist ja in nem namensbereich. geht das trotzdem?
-
Vermutlich willst Du das hier lesen:
http://de.wikipedia.org/wiki/Argument_dependent_name_lookup
-
Es gibt echt Leute die es mit der Deppenchatsprache übertreiben.
-
314159265358979 schrieb:
Es gibt echt Leute die es mit der Deppenchatsprache übertreiben.
Was stört Dich genau?
ach, nur rofl und lol statt foo und bar. lol.
-
314159265358979 schrieb:
Es gibt echt Leute die es mit der Deppenchatsprache übertreiben.
Habe ich mir auch gedacht. Hier gibt es Alternativen.
-
operatoren_lol schrieb:
hi community
geht das?
struct rofl{}; namespace lol { bool operator== (rofl const& first, rofl const& second) {/**/}; } int main() { rofl r1, r2; r1 == r2; }der vergleichsoperator ist ja in nem namensbereich. geht das trotzdem?
Um es kurz zu machen: Nein, es geht nicht, aber das hättest du ja mal ganz einfach selber austesten können.
ADL bzw Koenig-Lookup besagt, dass auch im Namespace der Argumente nach passenden Operatoren gesucht wird. Da rofl sich nicht im namespace lol befindet wird dein op== folglich auch nicht gefunden.
-
@TE: Nee, geht nich. Stichwort "name lookup". Guckst Du in Deinem Lieblings C++ Buch nach. Ist aber nicht ganz so trivial, was da alles passiert. Ich kann auch noch folgende Artikel empfehlen dazu:
http://www.gotw.ca/publications/mill02.htm
http://www.gotw.ca/publications/mill08.htm
-
Und wenn man den Namensraum durch using bekannt macht?
-
Mit
using namespace lolfindet er dan Operator, da er ja bekannt gemacht wird.
Lg freeG
-
Oder besser mit:
using lol::operator== (rofl const&, rofl const&);
-
EOutOfResources schrieb:
Oder besser mit:
using lol::operator== (rofl const&, rofl const&);Aber ohne Signatur,
usingist ein Schlüsselwort zur Beeinflussung des Name Lookups.