我已经看到使用 #ifdef 宏(例如 Eigen 库)来管理特定于平台的内容,但还没有看到任何人使用“内联命名空间”来管理特定于平台的代码。
下面的 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;
}
输出 :
$g++ func.cpp -Dplatform=common ; ./a.out 常用添加
$ g++ func.cpp -Dplatform=arm ; ./a.out 手臂添加