问题标签 [universal-reference]

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 回答
4730 浏览

c++ - 无法将左值绑定到 A&&

我认为通用引用 ( T&&) 应该采用任何类型的引用。但以下不起作用。

当我尝试在我正在编写的库中保持 const 正确时,我遇到了这个问题。我是 C++ 新手,以前从未见过这样的东西。

测试.cpp:

错误(用 编译g++ test.cpp -std=c++11):

顺便说一句,在实际程序中,class A不拥有任何实际数据,并且包含对实际保存数据的另一个类的引用。我希望这意味着当我允许成员函数接受临时对象时t,我不会经常创建间接/复制数据。class A

0 投票
1 回答
237 浏览

c++ - 如何 boost::bind 以通用引用作为参数的模板成员函数

我一直在尝试使用 boost::bind 将对成员函数的调用发布到 io_strand 但一直出错。我已经设法为我正在尝试做的事情创建一个简单的等效示例,并且在以下上下文中看到了相同的错误:

我有以下包含我要调用的 doThings() 成员函数的类:

然后有一个子类(以准确表示我遇到错误的场景 - 我认为这没有区别)

我有以下代码试图进行 boost::bind 调用:

然后调用如下:

当我编译上面的代码时,我得到以下错误:

错误:没有匹配将函数“doThings”转换为类型“void (class child::*)(int)”</p>


如果我将 doThings() 的函数签名更改为采用常规 B 类型而不是通用引用,即 BB&&它编译运行没有问题。
我怀疑我的问题与我在 getInt() 中所做的演员表有关:

但我不知道我需要将其更改为什么。A&&在这种情况下不起作用,因为我相信它会在那种情况下代表 r 值引用。我尝试时遇到的编译错误似乎证实了这一点:

错误:无法将“int”左值绑定到“int&&”</p>

为了完整性:如果我不尝试执行强制转换,那么我会收到以下编译错误:

错误:没有匹配的函数调用'bind(未解决的重载函数类型,child*,int)'</p>

有人可以告诉我我需要做什么才能使我的 boost::bind 调用在这种情况下有效吗?

我正在使用 C++11

0 投票
0 回答
41 浏览

c++ - 示例 is_copy_asignable 实现中的右值引用用法

我正在观看 Walter Brown 在 CppCon 2014 'Modern Template Metaprogramming: A Compendium' 上的演讲。在第二部分中,他通过 is_copy_assignable 的示例实现演示了 decltype 和 declval 的用法。

这是视频的链接,带有幻灯片,显示了源代码(如果你想听听他的解释,请倒带一点):https ://youtu.be/a0FliKwcwXE?t=1576

在这里,我在示例程序中输入了他的实现:

我的问题是关于函数模板(评论的):

为什么他使用右值引用?我尝试使用左值引用甚至按值传递参数,它似乎有效。

我在这里缺少什么?