Я переопределил некоторые математические функции (чтобы они были быстрее - то есть: менее точными - или использовали шаблоны).Я помещаю эти функции в пространство имен, и они прекрасно работают.
Однако часто случается так, что я забываю вызывать функции из своего пространства имен (то есть: я забываю писать mymath::cos
или using mymath::cos;
, когда яхочу позвонить cos
), и довольно сложно выяснить, где я это забыл (до сих пор я узнал это только по профилированию).
Учитывая, что
- I только включают стандартные заголовки
math.h
или cmath
в мой математический заголовок, и что - мне нужно включить стандартные математические заголовки (потому что некоторые из моих функций являются просто обертками для стандартного, иЯ хочу, чтобы они были встроенными или они были шаблонными),
есть ли переносимый способ скрыть стандартную математическую функцию, чтобы сообщать об ошибке компиляции, если глобальное пространство имен (то есть: без пространства имен) используются математические функции?
Решением может быть размещение using namespace mymath;
в нижней части моего заголовочного файла математики, но это решение не кажется таким уж большим: оно ломает всю цельпространств имен;Я предпочел бы, чтобы в явном виде говорилось, использовать ли функцию из mymath
или из std
, чтобы я был вынужден выбирать между функцией Fester или более точной без риска забыть об этом.
EDIT :
Во многих ответах говорится, что если я использую cos
из глобального пространства имен (без использования std
, ни mymath
), и включаю cmath
(ине math.h
), компиляция должна завершиться неудачей.
Я не знаю, что говорит стандарт об этом, но:
#include <cmath>
int main( ) {
cos( M_PI );
return 0;
}
прекрасно компилируется с GNU GCC (g++
) 4.5.1 (и более старые версии).