我正在尝试编写一些最初依赖于 Boost.Regex 的可移植 C++ 库代码,然后在编译器支持它时移至 TR1,并在事情从 std::tr1 命名空间移出后最终移至 C++0x 规范到标准。这是我想用预处理器做的一些伪代码:
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;
}
当然,所有这些都需要在预处理器指令中,但如果我知道如何完成它,我就不会在这里问了。:)