带 bo​​ost 的 C++11 占位符

2023-12-28

这段代码...

int main()
{
    using namespace std::placeholders;
    ClassA a;
    ClassB b, b2;
    a.SigA.connect( std::bind(&ClassB::PrintFoo, &b) );
    a.SigB.connect( std::bind(&ClassB::PrintInt, b,  _1));
    a.SigB.connect( std::bind(&ClassB::PrintInt, &b2, _1));

    a.SigA();
    a.SigB(4);
}

给出编译错误,“错误:对‘_1’的引用不明确”

它可以通过完全限定占位符来修复...

int main()
{
    // using namespace std::placeholders;
    ClassA a;
    ClassB b, b2;
    a.SigA.connect( std::bind(&ClassB::PrintFoo, &b) );
    a.SigB.connect( std::bind(&ClassB::PrintInt, b,  std::placeholders::_1));
    a.SigB.connect( std::bind(&ClassB::PrintInt, &b2, std::placeholders::_1));

    a.SigA();
    a.SigB(4);
}

...但是为什么第一个代码片段不起作用?

EDIT

为了防止任何歧义,我使用 Clang 和 Boost 1.52 进行编译--stdlib=libc++ -std=c++0x整个代码块是这样的......

#include <boost/signals2.hpp>
#include <iostream>

struct ClassA
{
    boost::signals2::signal<void ()>    SigA;
    boost::signals2::signal<void (int)> SigB;
};

struct ClassB
{
    void PrintFoo()      { std::cout << "Foo" << std::endl; }
    void PrintInt(int i) { std::cout << "Bar: " << i << std::endl; }
};

int main()
{
    // using namespace std::placeholders;
    ClassA a;
    ClassB b, b2;
    a.SigA.connect( std::bind(&ClassB::PrintFoo, &b) );
    a.SigB.connect( std::bind(&ClassB::PrintInt, b,  std::placeholders::_1));
    a.SigB.connect( std::bind(&ClassB::PrintInt, &b2, std::placeholders::_1));

    a.SigA();
    a.SigB(4);
}

让我们看看包含如何工作:

#include <boost/signals2.hpp>包括#include <boost/signals2/signal.hpp>包括#include <boost/signals2/slot.hpp>包括#include <boost/bind.hpp>包括#include <boost/bind/bind.hpp>包括include <boost/bind/placeholders.hpp>,它使用static boost::arg<1> _1;* 在全局命名空间中,因此存在歧义。

*:从技术上讲,_1位于未命名的命名空间中,但由于 using 指令而可见。

一种解决方法是在文件顶部定义以下内容,以便<boost/bind/placeholders.hpp>不包括在内:

#define BOOST_BIND_NO_PLACEHOLDERS
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带 bo​​ost 的 C++11 占位符 的相关文章

随机推荐

  • * 出了什么问题:任务 ':honeywell_scanner:compileDebugJavaWithJavac' 执行失败

  • KitchenPC 和 Ironpython

    我正在尝试使用 IronPython 来使用 KitchenPC 我正在使用数据库配置示例 http blog kitchenpc com 2014 02 11 kitchenpc database provisioning 101 htt
  • 如何根据 GUID 生成唯一的整数

    是否有可能从 GUID 生成 极有可能 唯一的整数 int i Guid NewGuid GetHashCode int j BitConverter ToInt32 Guid NewGuid ToByteArray 0 哪一个更好 埃里克
  • 如何找出Python中方法的数量

    我想找出Python中方法的数量 它接收的参数数量 现在我正在这样做 def arity obj method return getattr obj class method func code co argcount 1 remove s
  • 使用 AngularJS 和 Laravel 4 提交复选框值数组。复选框未检查(视觉上)

    Update 在对以下解决方案进行更多实验后 如何使用 AngularJS 绑定到复选框值列表 https stackoverflow com questions 14514461 how can angularjs bind to lis
  • 如何在不部署jar的情况下在Maven中配置子项目依赖?

    我用谷歌搜索了这个 似乎没有人有答案 但这似乎是一件基本的事情 它应该是可能的 我有以下项目结构 parent sub project1 sub project2 sub project2 需要有 sub project1 作为依赖项 所以
  • 如果没有表视图结果,则在屏幕上显示“无结果”

    我有一个tableview 有时可能没有任何结果可列出 所以我想要发布一些 没有结果 的内容如果没有结果 标签或一个表格视图单元格 有没有最简单的方法来做到这一点 我会尝试一个label在 后面tableview然后根据结果隐藏两者之一 但
  • 无法将 InnerHTML 属性设置为 null [重复]

    这个问题在这里已经有答案了 我有一个简单的 html 页面 正文标记中没有代码 我想通过javascript在body标签中插入html 我的 javascript 文件如下所示 var Global UserWall function r
  • iPad/iPhone 上的咆哮类型通知?

    iPad iPhone 上的咆哮类型通知 我想在 iPad 应用程序顶部显示非模式 非弹出通知 Growl 是一个 Mac OS X 程序 它会在屏幕一角显示一些小弹出窗口 这些窗口会在一段时间后消失 或者上面有一个小 x 以便更快关闭 H
  • 修复共享元素过渡动画显示不佳的问题

    我正在尝试在两个具有共享元素的活动之间创建共享元素过渡动画ImageView 第一个有一个RecyclerView使用项目单击侦听器 单击后 它应该通过转换启动另一个活动 关闭已启动的活动时动画效果良好 但启动活动时则不然 点击该项目后Re
  • 使用 Spring Security + CAS 进行循环重定向,但应该可以工作

    我正在尝试将基本应用程序从仅使用 Spring Security 更改为使用 CAS 以启用 SSO 但我在某个地方遇到了重定向循环 并且我无法找出问题所在 我还制作了另外两个模拟应用程序 在 CAS 上没有问题 因为它们正在工作 我使用
  • 将灰度转换为黑白的最佳阈值

    自动找出将灰度图像转换为黑白图像的最佳阈值的最佳方法是什么 我可以手动计算出相当好的阈值 但我想自动选择阈值 编辑 我已经阅读了一些有关这个问题的内容 通过查看图像的直方图可以有所帮助 例如如果图像具有双模态直方图 那么在模式之间选择阈值似
  • 以编程方式应用于按钮时,样式无法完全工作[重复]

    这个问题在这里已经有答案了 这是我的风格
  • 会话 VS 温度饼干

    我是在想 在 PHP 中设置没有过期的 cookie 意味着它会在浏览器关闭时过期 和设置会话变量有什么区别 我不是在谈论登录之类的事情 而不需要在每次页面访问时获取不经常更改的数据库值等 P S 您可以通过使用来更好地保护您的cookie
  • 如何在 Angular 中使用“routerLink”启用“ctrl+click”

    在 Angular 中 如果你使用这个 div img src div 当我按图像时 它会完美路由 我想按 ctrl 单击 在新选项卡中打开此链接 或将此图像拖动到新选项卡 但是当我按 ctrl 单击 时 它会在同一页面中打开 如果我拖动它
  • CSS 依赖于 ActiveX?

    只要启用了 ActiveX 我的页面就可以在 FF Chrome Safari 甚至 IE8 中运行 链接已删除 为了让 CSS3 功能 旋转 不透明度 文本阴影 在 IE8 中工作 我必须使用 ActiveX 过滤器 我的问题是 当您第一
  • Android - 通过服务器端验证保护应用内购买

    我是 Android 开发新手 但创建了一个应用程序 并实现了应用程序内购买以从应用程序中删除广告 我只是做了一个非常基本的实现 我基本上检查用户是否购买了 no ads 项目 如果是真的 则不会显示广告 问题是我看到很多 购买 记录在 f
  • Eclipse 无法通过代理连接到互联网

    我的 eclipse juno 4 2 centos 5 6 无法连接到互联网 完全没有 我有一个代理服务器设置 我看了一下Eclipse 无法连接到互联网 https stackoverflow com questions 7778484
  • NetworkX 从特定节点删除属性

    我在使用 python 中的 networkX 库时遇到问题 我建立了一个图表 用属性初始化一些节点 边 我还开发了一种方法 可以动态地将具有特定值的特定属性添加到目标节点 例如 def add tag self G fnode attr
  • 带 bo​​ost 的 C++11 占位符

    这段代码 int main using namespace std placeholders ClassA a ClassB b b2 a SigA connect std bind ClassB PrintFoo b a SigB con