为什么有些包含文件只驻留在tr1中
Why some include files only reside in tr1?
当我尝试包含像<unordered_map>
这样的东西时,它会失败并说文件不存在,而当我尝试包含<tr1/unordered_map>
时,它会工作。然而,包含文件也存在于c++03中,并且是c++11(如<vector>
有移动构造函数)。此外,仅在c++11中而不在tr1中的头文件也可以正常找到,例如<thread>
。
就像tr1中的所有新东西都被扔到tr1文件夹中,其他的都被扔到正常的include中。
为什么会发生这种情况?在不修改源文件的情况下,是否有任何修复方法?
传递-I/path/to/include/tr1
将不起作用,因为所有内容都在tr1命名空间中。
我使用的编译器是
Apple clang version 3.0 (tags/Apple/clang-211.10.1) (based on LLVM 3.0svn)
TR1(技术报告1)不是一个标准,而仅仅是一个报告。这是让人们知道委员会对这个领域感兴趣的官方方式。任何tr1实现都是一个实验性版本,旨在获得现场反馈,以改进未来的标准。
使用苹果的Xcode 4.2,你可以选择一个几乎完整的c++ 11库,通过搜索你的构建设置"libc++",然后选择"libc++"作为c++标准库(这不是默认的)。
或者,如果您喜欢命令行,您可以-stdlib=libc++。
libc++不包含任何tr1组件,但包含了除<atomic>
之外的所有c++ 11组件。
为clang++添加两个参数:
-std=c++11 -stdlib=libc++
是的,不同的编译器对TR1头文件的处理方式不同。例如,GCC做同样的事情,而MVS接受<unordered_map>
。解决这个问题的一种方法是,如果需要跨平台或多编译器编译,则使用boost/tr1/unordered_map.hpp
。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 无法在UE4中包含BP类到CPP类
- g++ 说函数不存在,即使包含正确的标头
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- Visual C++GC接口如何启用它以及要包含哪个库
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 为什么有些包含文件只驻留在tr1中