我刚刚使用std :: copysign找出了我测试平台之间的一些不兼容性。
在第一次测试时,我尝试在MSVC中测试一些算法。现在我尝试将这个c ++(11)代码移植到Xilinx Zynq平台(A9 + FPGA)。
这是有效的,除了没有std :: copysign包括cmath。所以我必须使用没有命名空间的copysign。
将此函数添加到命名空间的正确方法是什么?
PS:我不想手动管理不同平台上的相同文件,只是因为命名空间不兼容。
编译标志是:
-c -fmessage-length=0 -MT"$@" -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -std=c++11
答案 0 :(得分:0)
您可以为msvc创建一个宏。
#if defined(_MSC_VER)
#define copysign std::copysign
#endif
但是,c ++ 11应该有std命名空间。如果您没有使用c ++ 11进行编译,那么您可能会获得一组较旧的库?我要检查以确保你是。如果你不能在你的平台上使用c ++ 11进行编译,那么上面应该可行。如果需要,添加更多预处理器标志以定位更多平台。
另一种选择是
using namespace std;
这将涵盖两种情况。