Mein Kollege definierte eine Reihe von Funktionen (die meiner Meinung nach freie Funktionen sein sollten) innerhalb einer statusfreien Klasse als statische Member-Funktionen.
Da diese Klasse definiert ist und Typen aus einem verschachtelten Namespace verwendet, möchte ich ADL verwenden, um weniger unbrauchbaren Code zu schreiben. Aber hat ihre Entscheidung nicht gerade den Zweck von ADL gebrochen?Machen Sie ADL mit statischen Elementfunktionen arbeiten
namespace nested_long_namespace_name
{
struct type {};
struct interface { static void f(type) {} };
}
int main()
{
nested_long_namespace_name::type value{};
f(value); // ERROR (ADL does not kick in)
interface::f(value); // ERROR (ADL does not kick in)
nested_long_namespace_name::interface::f(value); // OK
}
Nun, meine Frage ist: Gibt es eine Abhilfe andere, dass f
als freie Funktion im Namensraum nested_long_namespace_name
definieren?
Ihr Kollege hat unqualifiziertes Nachschlagen (von außerhalb der Klasse) unmöglich gemacht. Also ja, keine ADL. – StoryTeller
Wenn die Länge des Namespaces ein Problem ist, verwenden Sie einen Namespace-Alias. – chris
Sie könnten 'auto & f = nutzlos :: f;' verwenden, um 'f' in den Namespace-Bereich zu bringen, aber leider wird dies auch nicht über ADL gefunden. – wally