클래스 메서드를 첫 번째 포인터를 저장하는 다른 클래스에서 바인딩하려고했지만 항상 다른 값을 제공합니다. 내가 뭘 잘못하고 있니?C++ 함수 : 포인터를 통해 클래스 메서드 바인딩
값으로 클래스 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
@dlf "a_mul은 초기화 할 수 없습니다."그렇습니다. C++ 11에 오신 것을 환영합니다. –
@ n.m. 산뜻한! 그러나 Microsoft의 (2012) C++ 11은 아닙니다. : – dlf