Я видел использование макросов #ifdef (пример Eigen library) для управления конкретной платформой, но не видел, чтобы кто-то использовал «встроенное пространство имен» для управления конкретным кодом платформы.встроенный метод пространства имен для управления конкретным кодом платформы в C++
Листы github repo дают конкретный код и пример использования. https://github.com/dchichkov/curious-namespace-trick/wiki/Curious-Namespace-Trick
Мне интересно, если это жизнеспособная техника для использования или есть какие-либо ошибки, которые я не могу видеть. Ниже приведен фрагмент кода:
#include <stdio.h>
namespace project {
// arm/math.h
namespace arm {
inline void add_() {printf("arm add\n");} // try comment out
}
// math.h
inline void add_() {
//
printf("common add\n");
//
} inline namespace platform {inline void add() {add_();}}
inline void dot_() {
//
add();
//
} inline namespace platform {inline void dot() {dot_();}}
}
int main() {
project::dot();
return 1;
}
Выход:
$ г ++ func.cpp -Dplatform = общий; ./a.out общий добавить
$ g ++ func.cpp -Dplatform = arm; ./a.out arm add
Хотя полезно ссылаться на источник, вы также должны скопировать и вставить минимальный фрагмент кода здесь (и правильно отформатировать его!), Который демонстрирует то, что вы описываете. –
Он не используется, потому что inline namespaces является новой функцией и не поддерживается широко, но этот сценарий является одной из основных причин их существования. Это не очень любопытно или трюк. –
@JonathonReinhart Обновлен с помощью фрагмента кода. – Tej