【发布时间】:2014-07-11 22:01:18
【问题描述】:
我试图从另一个存储第一个指针的类中绑定一个类方法,但它总是给我不同的值。 我做错了什么?
如果我按值传递 A 类(当然也可以修改 B 类以按值存储),它就可以工作。
#include <iostream>
#include <functional>
using namespace std;
class A {
public:
A(double a, double b) : a(a), b(b) {}
double mul(void) {return a*b;}
private:
double a;
double b;
};
class B {
typedef std::function<double(void)> function;
public:
B(A* ap) : ap(ap) {}
function a_mul = bind(&A::mul, ap);
private:
A* ap;
};
int main() {
A* a = new A(2,3);
B b(a);
cout << b.a_mul() << endl;
return 0;
}
【问题讨论】:
-
a_mul 不能像那样内联初始化,所以我认为这不是您正在运行的确切代码。除了 a_mul 初始化,它看起来还可以。所以问题一定出在一些没有被展示出来的东西上……
-
@dlf "a_mul can't be initialized inline like that" 可以,欢迎使用 C++11。
-
@n.m.整洁的!但显然不是微软的 (2012) C++11。 :(
-
@mooattyi 我只想说,对于第一个问题,这是一篇非常好的帖子。您提供了一个SSCCE,清楚地说明了问题。继续加油!
-
@dlf 2012 严重缺乏 2011 部门。试试 2013 或 clang 或 gcc。
标签: c++ c++11 functional-programming std-function stdbind