如果未声明,则由预处理器删除thread::hardware_concurrency



我有使用的C++代码

int nthreads = thread::hardware_concurrency();

当我试图在一些计算机上构建应用程序时,我会收到错误消息

error: 'thread' has not been declared

我不询问如何解决这个错误。我更感兴趣的是,如果有一个特殊的"保护",我可以用它来简单地删除预处理器的代码行,比如在OpenMP中,我可以使用:

#ifdef _OPENMP
...
#endif

std::thread::hardware_concurrency由C++11提供。如果这些"某些计算机"上的编译器支持它,您可能必须切换对C++11的支持(例如,使用mingw/gcc-std=c++11(。

要在不可用时禁用hardware_concurrency的使用,最好的解决方案可能是检测对C++11的支持。

这个答案可能对你有用,即使你使用VisualStudio:

#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的版本。如果hardware_concurrency恰好在较旧的VS编译器上可用,则可以将_MSC_VER检查调整为较旧的版本。

最新更新