- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
给定以下类:
struct foo : public boost::static_visitor<> {
void do_stuff(int item) {}
}
现在,在另一个上下文中我有一个 std::vector<foo>
并想对其执行以下算法:
using namespace std::tr1;
using namespace std::tr1::placeholders;
std::vector<foo> items;
std::for_each(items.begin(), items.end(), bind(&foo::do_stuff, _1));
这会抛出一个巨大的模板错误消息,归结为对 std::tr1::ref
的模棱两可的调用或 boost::ref
.如果我删除基类 boost::static_visitor
来自 foo
一切正常。
据我了解,问题在于 std::tr1::bind
的代码深处, 一个 ref(arg)
在没有 namespace 限定的情况下被调用。因为bind
在命名空间 std::tr1
中, std::tr1::ref
在范围内。但是,因为 foo
继承自命名空间 boost
中的类, ADL 还发现 boost::ref
.这样理解对吗?
因为我需要那个基类(它是 Boost.Variant 的一部分),我需要知道这里是否有任何方法可以从我的代码中消除这个调用的歧义?
注意:我在这里坚持使用 C++03,因此使用了 std::tr1
.
最佳答案
Jesse 提供了一个链接,指向一个解决这个问题的答案。但是,在这种特殊情况下,我想出了一个不同的解决方案。 boost::static_visitor
只有一个功能,它提供了一个result_type
typedef。这可以很容易地手动添加,并且不再需要基类。
关于c++ - 如何用不同 namespace 中的候选人消除 ADL 调用的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505315/
pimpl(也称为:编译器防火墙)惯用语用于缩短编译时间,但代价是可读性和一点运行时性能。目前一个项目需要很长时间才能编译,如何衡量最好的 pimpl 候选人? 我有使用 pimpl 的经验,可以将项
[下面用粗体表示的问题] 我在运行 OS Ubuntu 14.04 的防火墙后面的数据中心中设置了 Kurento Media Server 5.1.3。它有两个网卡: 222.222.222.222
我正在使用 Kurento Utils用于与 Kurento 媒体服务器(ver 5.x)的 WebRTC 连接 在初始化期间的 kurento-utils-js 库中,简化代码如下所示: if (!
在 unite.vim 中搜索后,你打开一个候选人。有没有一种简单的方法可以跳转到下一个而无需再次运行搜索命令?类似的插件( ack.vim , git-grep )使用快速修复窗口,因此您可以输入
为了我自己,我正在逐步测试 WebRTC 程序。 我为无服务器 WebRTC 编写了一些测试站点。 http://webrtcdevelop.appspot.com/ 其实使用的是google的STU
我有一个基本的 webRTC 应用程序,它支持两个同行之间的视频/音频通信和文件共享,当我在 Mozilla Firefox 上打开它时,该应用程序按预期运行,但当我在 Google Chrome 上
我是一名优秀的程序员,十分优秀!