问题标签 [tr1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
600 浏览

interop - .NET 互操作和 TR1 shared_ptr

如何将非托管 C++ 代码中的 shared_ptr 编组为 C#?

我在 C++ 中有一个函数(通过 C 绑定公开),它将分配一个新的 MyObject 并通过 shared_ptr 返回指向它的指针。

在 C++ 中,我可以调用该函数:

其中 MyObjHandle 被定义:

我将如何 PInvoke 从 C# 对 GetMyObject 的调用?我做了很明显的定义结构 MyObjectHandle 几乎就像在 C# 中一样,除了我将成员 objPtr 定义为 IntPtr。这以 AccessViolationException 错误惨遭失败。尝试了其他几个 PInvoke 变体,但也失败了。我似乎找不到任何带有 shared_ptr 和 C# 的互操作示例。任何帮助表示赞赏...

0 投票
1 回答
1104 浏览

c++ - 如何让 tr1::array 分配对齐的内存?

您可以通过定义自己的分配器来分配一个 std::vector 来分配对齐的堆内存。您可以使用 declspec align 在堆栈上分配 c 样式的数组。但是你能声明一个 tr1::array 来保证索引为零的元素对齐吗?

0 投票
2 回答
748 浏览

c++ - 在 VC++ 中是否有 boost::shared_ptr 的本机/可靠替代方案?

我的公司不允许使用boost(出于许多愚蠢的原因,但这是题外话)。

当我习惯使用原始指针以及个人发展时shared_ptr,我感到非常沮丧。weak_ptrscoped_ptr

我们只使用 Microsoft 编译器 (Visual Studio 2010),我想知道这些模板是否有替代方案可以减轻我的痛苦。

我曾经听说过,std::tr1但我不确定这是什么。我相信这是微软对下一个标准的某种实现,但我们可以依赖它吗?它提供什么?有什么保证吗?应该包含哪些标题?

0 投票
2 回答
1646 浏览

regex - tr1::regex regex_search 问题

我正在使用 tr1::regex 尝试从字符串中提取一些匹配项。一个示例字符串可能是

我想摆脱这种情况:

将引号中的东西组合在一起,所以我正在尝试使用 regex \"(.+?)\"|([^\\s]+)。我正在使用的代码是:

但输出

我究竟做错了什么?

0 投票
7 回答
16887 浏览

c++ - 为什么 std::function 不能相等比较?

这个问题也适用于boost::functionstd::tr1::function

std::function不相等可比:

在 C++11 中,operator==andoperator!=重载根本不存在。在早期的 C++11 草案中,重载被声明为已删除并带有注释(N3092 §20.8.14.2):

它没有说明“类型系统中可能存在的漏洞”是什么。在 TR1 和 Boost 中,重载已声明但未定义。TR1 规范注释(N1836 §3.7.2.6):

这些成员函数应保持未定义。

[注意:类似布尔的转换打开了一个漏洞,两个函数实例可以通过==或进行比较!=。这些未定义void的运算符弥补了漏洞并确保了编译时错误。——尾注]

我对“漏洞”的理解是,如果我们有一个bool转换函数,那么该转换可以用于相等比较(以及其他情况):

我的印象是 C++03 中的 safe-bool 习惯用法和 C++11 中使用显式转换函数来避免这个“漏洞”。Boost 和 TR1 都使用了 safe-bool 习惯用法,function而 C++11 使bool转换函数显式化。

作为具有两者的类的示例,std::shared_ptr两者都具有显式bool转换功能并且是相等可比的。

为什么std::function平等没有可比性?什么是“类型系统中可能存在的漏洞”?它与 有何不同std::shared_ptr

0 投票
3 回答
5229 浏览

c++ - 是 std::array如果 T 是 POD,保证是 POD?

我目前正在编写一个 C++ 内存编辑库,对于读/写 API,我使用类型特征(std::is_pod、std::is_same)和 boost::enable_if 来提供 3 个重载:

  1. POD 类型。例如 MyMem.Read(SomeAddress);
  2. 字符串类型。例如 MyMem.Read>(SomeAddress); (这实际上并没有读出 C++ 字符串,它读出了 C 风格的字符串并将其转换为 C++ 字符串。)
  3. 向量类型。例如 MyMem.Read>(SomeAddress, NumElem); (这实际上并不读出向量,而是读出 C 风格的数组并将其转换为向量。)

重载 2 和 3 只是重载 1 的“包装器”。(因此,如果您正在读取 std::vector 或 std::basic_string 并且 T 不是 POD,它将失败,因为它应该。)

最近我想使用 std::array 进行一堆读取和写入,因为我知道在编译时我想要读取和写入的数据的大小(我正在编写一个 PE 文件格式的包装器)。

我编写了使用 std::array 的代码,然后打算添加另一个重载来检测和处理 std::array 类型,但我不小心点击了编译,令我惊讶的是它起作用了!

我目前正在使用 MSVC 10,事实证明,对于 std::array,如果 T 是 POD,则 std::array 是 POD。(这意味着我可以只使用重载 1 并且它可以工作。)

我的问题是这是由 C++ 标准保证还是由实现决定。

我知道我可以自己检查标准,但我对自己的信任不如对本网站上的一些语言律师的信任,所以我认为最好获得“第二意见”。;)

谢谢

PS 代码可在此处获得(它是仅标头库): http ://code.google.com/p/hadesmem/source/browse/trunk/HadesMem-v2/Hades-Memory/Hades-Memory/MemoryMgr.h#86

0 投票
1 回答
1954 浏览

c++ - 将 lambda 转换为 std::tr1::function

使用带有 tr1 服务包和英特尔 C++ 编译器 11.1.071 [IA-32] 的 Visual Studio 2008,这与我的另一个问题有关

我正在尝试为 c++ 编写一个功能映射,它的工作方式有点像 ruby​​ 版本

所以我在 VlcFunctional 命名空间中定义了以下函数

你可以这样调用它(注意函数模板参数是显式定义的):

或者像这样(注意函数模板参数没有明确定义)

但至关重要的是,不喜欢这样

如果没有明确定义 hte 模板参数,它不知道要使用哪个模板,并且会因编译错误而崩溃

必须定义模板参数使其语法变得更加庞大,我的目标是在调用站点上尽量减少麻烦——关于为什么它不知道如何进行转换的任何想法?这是编译器问题还是语言不允许这种类型的模板参数推断?

0 投票
2 回答
1371 浏览

c++ - Virtual member functions and std::tr1::function: How does this work?

Here is a sample piece of code. Note that B is a subclass of A and both provide a unique print routine. Also notice in main that both bind calls are to &A::print, though in the latter case a reference to B is passed.

Here is the output I see compiling with GCC 4.2:

I would consider this correct behavior, but I am at a loss to explain how it is working properly given that the std::tr1::functions were bound to &A::print in both cases. Can someone please enlighten me?

EDIT: Thanks for the answers. I am familiar with inheritance and polymorphic types. What I am interested in is what does &A::print mean? Is it an offset into a vtable, and that vtable changes based on the referred object (in this case, a or b?) From a more nuts-and-bolts perspective, how does this code behave correctly?

0 投票
3 回答
3618 浏览

c++ - Using C++ Technical Report 1 (TR1) in VC++ 2010

How do I use a C++ TR1 library in visual c++ 2010?

0 投票
2 回答
1307 浏览

c++ - 用列表中的每个元素调用 c++ 成员函数?

我有一个清单Thing和一个Controller我想要notify()的每件事。下面的代码有效:

Notifier我的问题是:我可以通过使用某些版本的“这不起作用”行来摆脱课程吗?似乎我应该能够做一些事情,但不能完全得到正确的组合。(我摸索了许多不同的组合。)

不使用升压?(如果可以的话,我会的。)我正在使用 g++ 4.1.2,是的,我知道它很旧......