【问题标题】:How to bind 'this' to a class function in C++ TR1?如何将“this”绑定到 C++ TR1 中的类函数?
【发布时间】:2013-01-06 07:44:54
【问题描述】:

我想为特定实例的类方法创建一个函数。如示例所示,我想为this->x 创建一个函数。

class A {
 public:
  void x(int p) { }
  void y() {
    function<void(int)> f = std::tr1::bind(
      &A::x,
      this,
      std::tr1::placeholders::_1);
  }
};

当我尝试编译它时,我收到了很长的错误消息。其中一个可能有意义的是note: no known conversion for argument 1 from ‘int’ to ‘int&amp;’

【问题讨论】:

  • 在 GCC 4.7.2 上都是 working fine。你用的是哪个编译器?
  • 没有已知的参数 1 从“int”到“int&”的转换。哈哈,这太搞笑了!你的编译器(或编译过程)有问题!
  • 感谢@chris!我在 gcc-4.7.1-glibc-2.14.1 上。我会用更新的 gcc 试试。
  • 试试clang编译器,它可能会工作。
  • @woodings 更好的是,使用 C++11 而不是 TR1。新版本的 GCC 对 TR1 的支持可能会变得更糟,因为它已被取代。要将其转换为 TR1 程序,请将 -std=c++11 传递给编译器并从源中删除 tr1:: 的所有实例。

标签: c++ tr1


【解决方案1】:

最好从 TR1 迁移到 C++11,它是 2006 年的一个非正式提案,它包含 TR1 的大部分内容(这意味着如果你删除 @987654321,TR1 程序可能会转换为 C++11 @s)。

虽然接口大多相同,但 TR1 实现是独立的。所以它基本上被及时冻结了,新的编译器怪癖可能会导致它崩溃。或者在其他平台上,他们可能会将 TR1 功能别名为“本机”C++11,这意味着 tr1:: 类可能与实际的 TR1 规范有所不同。

在 GCC 上,删除 tr1:: 后,从标头中删除 tr1/ 并在命令行中传递 -std=c++11

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2016-12-22
    相关资源
    最近更新 更多