プラットフォーム固有の管理に #ifdef マクロ ( Eigen ライブラリの例 ) を使用しているのを見たことがありますが、「インライン名前空間」を使用してプラットフォーム固有のコードを管理している人は見たことがありません。
以下の github リポジトリには、特定のコードと使用例が示されています。 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;
}
出力:
$g++ func.cpp -Dplatform=common ; ./a.out 共通追加
$ g++ func.cpp -Dplatform=arm ; ./a.out アーム追加