Ich habe einige mathematische Funktionen neu definiert (damit sie schneller sind -ich: weniger genau- oder Vorlagen verwenden). Ich stelle diese Funktionen in einen Namensraum und sie funktionieren gut.C++: Einige Funktionen ausblenden
Es kommt oft vor, aber, dass ich Funktionen von meinem Namensraum zu nennen vergessen (dh: Ich mymath::cos
oder using mymath::cos;
schreiben vergessen, als ich cos
nennen will), und es ist ziemlich hart, um herauszufinden, wo ich es vergessen haben (bis jetzt habe ich es nur durch Profiling herausgefunden.
Da
- I nur umfassen Standard
math.h
odercmath
Header in meiner Mathe-Header und dass - ich brauche Standard-Mathematik-Header enthalten (weil einige meiner Funktionen sind Wrapper nur für Standard , und ich möchte, dass sie inline sein oder sie sind als Templat),
gibt es eine tragbare Art und Weise zu verstecken Standardmathematikfunktion, so dass ein Kompilierfehler gemeldet wird, wenn globale Namespaces (dh: ohne Namespace) mathematische Funktionen verwendet werden?
Eine Lösung könnte eine using namespace mymath;
am Ende meiner Math-Header-Datei setzen, aber diese Lösung scheint nicht so toll: Es bricht den ganzen Zweck von Namespaces; Ich möchte lieber explizit sagen, ob ich eine Funktion von mymath
oder von std
verwenden soll, so dass ich gezwungen bin, zwischen einer Eiter- oder einer genaueren Funktion zu wählen, ohne das Risiko einzugehen, darüber zu vergessen.
EDIT:
Viele Antworten sagen, dass, wenn ich cos
von den globalen Namespace verwenden (ohne std
noch mymath
zu verwenden) und umfassen cmath
(und nicht math.h
) sollte Kompilierung fehlschlagen.
Ich weiß nicht, was der Standard sagt darüber, aber:
#include <cmath>
int main() {
cos(M_PI);
return 0;
}
mit GNU GCC kompiliert fein (g++
) 4.5.1 (und ältere Versionen).
Sie sind richtig in Bezug auf die EDIT: "Es ist nicht angegeben, ob diese Namen zuerst im globalen Namespace-Bereich deklariert werden und dann durch explizite using-Deklarationen in Namespace std injiziert werden". – ybungalobill