我有使用的C ++代码
int nthreads = thread::hardware_concurrency();
当我尝试在某些计算机上构建应用程序时,出现错误消息
error: 'thread' has not been declared
我不问如何解决错误。我对是否有一个特殊的“防护”(如果我可以使用它来简单地通过预处理器删除代码行)感兴趣,例如在OpenMP中,我可以使用:
#ifdef _OPENMP
...
#endif
答案 0 :(得分:4)
std::thread::hardware_concurrency
由C ++ 11提供。如果那些“某些计算机”上的编译器支持它,则可能必须切换C ++ 11支持(例如,使用mingw / gcc -std=c++11
)。
要在不可用时禁用hardware_concurrency
使用,最好的解决方案可能是检测C ++ 11支持。
This answer可能对您有用,即使您使用Visual Studio也是如此:
#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900)
int nthreads = std::thread::hardware_concurrency();
#else
int nthreads = 4; // whatever fallback value
#endif
请注意,它检测到VS 2015编译器版本,因为它是第一个广告,它完全支持C ++ 11。如果_MSC_VER
恰好在较旧的VS编译器上可用,则可以将hardware_concurrency
调整为较旧的版本。