作为多平台项目的一部分(到目前为止,Android和iOS),我们共享一个通用的C++代码库,以满足数学和算法要求。
作为Android开发人员,我在使用同事在iOS项目中使用的标准库(STL)时遇到一些问题。
在我的build.gradle
> android.ndk
中,我使用:cppFlags += "-std=c++11"
和stl = 'gnustl_shared'
作为示例,我不能使用原始STL中的std::nth_element()
或std::sort()
,而必须包括:bits/algorithmfwd.h
或bits/stl_algo.h
。
我去了include <bits/stl_algo.h>
,到目前为止一切顺利。
问题是,我们共享此代码库,我想知道是否可以使用标志标识运行平台的,以便代码动态使用正确的和。
谢谢您的帮助 !
[更新1]
正如@andreas-reiff in his answer所注意到的,目前还不清楚,我确实正在寻找要在头文件中使用的标志,以便在编译时(而不是在运行时)执行正确的包含。
如前所述,当前平台是iOS和Android。哪些标志可以帮助我们识别这些平台?
最佳答案
您正在混淆编译时间和运行时。
1)包含用于编译时,因此您可以区分此e。 G。通过构建配置,然后选择适当的包含。这也是正常的方法。此外,您可以交换一些文件,也可以使用#ifdef指令来实现仅在某些平台上可用的功能。
2)至于运行时,从通用C++中查找可能会有些困难,我建议您简单地从调用代码中注入(inject)该信息:必须在某个地方知道它在哪里运行,该代码可以然后在代码中设置一个属性,告诉它在哪里运行。
您可能想要1),尽管已经适当地选择了库。