- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
C++03 缺少一些我喜欢使用的东西:std::shared_ptr
、std::function
和 std::bind
。
我们不能完全切换到 C++11,因为该项目需要使用较旧的 libstdc++ 版本。我知道 Boost 中也有这个东西,但由于其他原因我们不能使用它。
因此我们开始使用 C++ 0x/TR1,我们目前使用的所有编译器版本都支持它。但是我们遇到了一些麻烦:
-std=c++0x
开关在 Clang 中的作用,没有它也能正常编译std::tr1::shared_ptr
与 std::shared_ptr
那么,问题是:当可移植性很重要时,使用 C++ 0x/TR1 是否安全?它是否在所有主要编译器中实现?我应该担心专有工具链等吗?我们最好坚持使用 C++03 吗?
最佳答案
TR1 是 C++ 标准委员会所做的实验。实验的目的是为图书馆获得现场经验,希望在未来的标准中对其进行标准化。
TR1 不是规范标准。
TR1 规范指定使用命名空间std::tr1
.东西没有放入命名空间的原因 std
是为了让委员会在标准化的道路上更自由地修改TR1规范。是的,当大部分 TR1 在 C++11 中标准化时,在某些地方进行了修改。
TR1 文档以这些词开头:
This technical report is non-normative. Some of the library components in this technical report may be considered for standardization in a future version of C++, but they are not currently part of any C++ standard. Some of the components in this technical report may never be standardized, and others may be standardized in a substantially changed form.
The goal of this technical report it to build more widespread existing practice for an expanded C++ standard library. It gives advice on extensions to those vendors who wish to provide them.
大多数(但不是全部)TR1 在 2005 年跨 gcc 和 MSVC 广泛实现。 llvm libc++是在 TR1 时间框架之后开发的,直接针对新的 C++11 标准,该标准将许多 TR1 组件移入命名空间 std
,并使它们规范(标准要求)。
已知 Clang 与 llvm libc++ 一起使用和 gcc 的 libstdc++。
我不知道您需要在哪些 std::lib 实现之间进行移植。如果所有地方都需要移植来实现 TR1,那么它是安全的,否则就不是。但是TR1并不是一个规范的标准。 C++98、C++03和C++11是规范标准。
Checked just for fun, and it turns out libcxx used in Emscripten is the issue, not Clang 3.2.
我指导过许多项目所有者如何使他们使用 TR1 的代码可移植到 libstdc++(有 TR1)和 libc++(有 C++11)。 libc++ 将那些标准化为 C++11 的 TR1 组件放在命名空间 std
中如 C++11 中所指定。即使在 -std=c++03 时它也会这样做。这是作为过渡援助完成的。 libc++ 并不试图成为一个符合 C++03 的库。它的生命从 C++11 开始。
libc++ 有一个名为_LIBCPP_VERSION
的版本号宏。 .如果这个宏是在包含一个 std-header 之后定义的,那么你正在使用 libc++,否则你就不是。所以你可以这样写代码:
#ifdef _LIBCPP_VERSION
// using libc++
#include <memory>
typedef std::shared_ptr<MyType> MyTypePtr;
#else // !_LIBCPP_VERSION
// not using libc++
#include <tr1/memory>
typedef std::tr1::shared_ptr<MyType> MyTypePtr;
#endif // _LIBCPP_VERSION
请注意,您必须首先为 _LIBCPP_VERSION
包含一些标准 header 是否得到定义。如果你需要无偿地包含一个 std-header 来查看是否 _LIBCPP_VERSION
得到定义,使用:
#include <ciso646> // detect std-lib
C++98/03/11 指定 <ciso646>
什么都不做。所以包括在内是非常便宜的。这个头文件的 libc++ 实现除了定义 _LIBCPP_VERSION
什么都不做。 .
完成后,您的代码现在可以轻松地在 libc++ 和其他实现 TR1 的库之间切换。
关于c++ - 当可移植性很重要时,使用 C++ 0x/TR1 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831151/
我想要数组中所选 tr 的所有下一个 tr 的 data-id。我使用此代码,但这不是一个好代码。 var ids = Array.prototype.slice.call($("tr.selecte
JSFiddle:http://jsfiddle.net/9u8tnh97/ 我正在使用 jQuery 和 Bootstrap。我有一张 table 4 像这样的元素:
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
在 Notepad++ 中,我试图制作一个正则表达式来匹配标签。起初,我认为必须转义大括号,所以我尝试了 \ .然而,这不仅符合我预期的开始标签,而且匹配所有 。 s( 和 )。这是为什么? 最佳答
我正在尝试定位其中包含子表行元素的表中的最后一个父表行。我已尝试使用下面的 jQuery 来定位 :last 伪值,但是,如预期的那样,它的目标是目标父表中的绝对最后一个表行元素。 $('table[
我想插入新的在每个现有的 之后。我的功能: var element = document.querySelector('tr.cart-item'); var newElement = docume
这个问题在这里已经有了答案: RegEx match open tags except XHTML self-contained tags (35 个答案) 关闭 9 年前。 我希望这个正则表达式匹
生成此代码是为了做两件事。第一个是单击复选框时突出显示表记录。第二个是即使页面刷新也能记住结果。 Untitled Document
嗨,我正在尝试在 tr 数组中查找 tr属性名称是 docId 是否有任何类型的 jquery 选择器? 我不想只用 for 循环遍历数组然后自己去找。 除非你说我别无选择... 谢谢 最佳答案 如果
我有一张 table ,我想在单击加号图标时在 tr 中打开相同的 tr。我不明白我使用哪个 html 元素打开。 请帮帮我。提前致谢。
对你来说是个小问题:-) 我正在使用 BeautifulSoup 来解析 HTML 页面中表格的内容。问题是在我的输出文件的每一行(CSV/EXCEL)之间,它拉出一个空行......这是 HTML
我制作了一个包含基本信息的表格,每个奇数行和偶数行都有不同的颜色。在 :hover影响它是橙色的,不管它是偶数还是奇数。 但是当我想“分组”3 我发现了一个问题。我试着把它包装成 但它没有用。我的目标
在 lxml 中,我使用 xpath 选择表(具有不同行数)中的所有 tr,除了包含乱码的最后两行。 是否有排除最后两行的模式匹配?我正在浏览 xpath 教程,显然有一个“except”运算符和一个
我在表列表中显示来自数据库的记录。此外,我在每一行中都有一个跟进按钮,如果任何用户单击跟进按钮,则会为特定用户打开一个包含详细信息的弹出窗口。 或者任何其他想法来处理这个问题? 我试过用这样的东西
我有以下表格结构。 当我点击 时我想添加新的 在 旁边其中被点击。 所以结果会是:
使用这个 HTML: 1 2 3 4 我得到这个输出: 1 2 3 4 但我想要的是: 1 2 3 4 如何
嗨,我有一个表格,我在这里做了一些代码来将表格更改为可编辑和可选择...我的要求是 1.当点击一个TR时,它应该变成蓝色,再次点击另一个TR,它将显示蓝色,旧的TR变成白色(威胁不可选择) 我由于一些
这个问题可能令人困惑,但这就是确切的情况.. 我已经动态生成了一些(根据从数据库获取的数据),现在我想允许用户选择其中一个单选按钮,并且我想捕获所单击的行的详细信息,因此请检查我的代码并协助 我的aj
免责声明:HTML、JQuery、Ajax 技能水平 — 垃圾。一直是一个厚客户。 我有一个表单,允许用户输入客户代码和电子邮件地址。我想在客户代码有效时显示客户的姓名。我会错误地通过 Ajax 和
正在尝试添加 其他元素 表中的元素根据 的行跨度该特定元素 元素。在同一功能中,单击 中的此按钮后元素的行数每次增加1,因此也需要增加行数。不知道该怎么做。也许使用 slice()以某种方式发挥作
我是一名优秀的程序员,十分优秀!