c++ - 确定 C++ 中包含文件的编译时存在

标签 c++ c++11 boost c-preprocessor tr1

我正在尝试编写一些可移植的 C++ 库代码,这些代码最初将依赖于 Boost.Regex,然后在编译器支持时转移到 TR1,并在从 std 转移后最终转移到 C++0x 规范: :tr1 命名空间到标准。下面是我想用预处理器做的一些伪代码:

if( exists(regex) )    // check if I can #include <regex>
{
    #include <regex>    // per TR1
    if( is_namespace(std::tr1) )   // are we on TR1 or C++0x?
    {
        using std::tr1::regex;
    } else
    {
        using std::regex;
    }
} else    // fall-back to boost
{
    #include <boost/regex.hpp>
    using boost::regex;
}

诚然,所有这些都需要在预处理器指令中,但如果我知道如何实现,我就不会在这里问了。 :)

最佳答案

在预处理 之前,如果不依赖第三方事物,您将无法做到这一点。通常,可以使用 autoconf 之类的东西来完成此操作。

它们的工作原理是使用 #define 指令生成另一个头文件,指示存在您要使用的头文件/库。

关于c++ - 确定 C++ 中包含文件的编译时存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1181633/

相关文章:

c++ - 为什么只包含一个虚函数的类的大小会受到影响?

c++ - Windows 的 timespec 等价物

boost - 构建 boost python 3.4 64位

c++ - 使用 boost::asio 的 HTTP POST 请求

c++ - Boost状态图-使用状态图作为模板参数时出现编译错误

c++ - 我们可以在 C++17 中检测到 "trivial relocatability"吗?

c++ - 在静态断言和运行时错误之间自动选择

c++ - static_cast int 引用 int?

c++ - 为什么序列操作算法谓词是通过拷贝传递的?

c++ - 在std::__ cxx11::basic_string <char,std::char_traits <char>,…,std::allocator <char>> const&)中获取未知的段错误“(地址)const()