2012-02-25 3 views
0

boost :: bind를 사용하고 싶습니다. (필자의 문제에 대한 올바른 해결책인지는 확실하지 않습니다.) 하나의 함수에 래퍼를 생성하려면 랩퍼는 하나의 인수 만 취하고 다른 하나는 일정한 값으로 고정합니다.boost :: bind를 사용하여 함수 래퍼를 만드는 방법

typedef boost::function<double (double)> callback; 

내 아이디어와 함수 래퍼를 만드는 것이 었습니다 : 내 기능 내 코드에서

double f(double a, double b) 
{ 
    return a/b; 
} 

또는

double g(double b) 
{ 
    return 2*b; // b+b? 
} 

처럼 하나 개의 인수를 함수에 대한 형식 정의를 보면 이 :

callback cb; 
cb = boost::bind(f, _1, 2)(x); 

는 인수 전달 래핑 기능 사용하는 I 제 3 함수를 호출 할 수 있도록 :

double use(callback cb, double x, double y) 
{ 
    return cb(x0) - y0; 
} 

를 I는 하나 개 또는 두 개의 인자를 약 30 기능을 가지고, 상기 제 1 또는 제 2 상수이어야한다. 이 상수는 use()으로 알려져 있지 않지만 use에 구현 된 알고리즘은 모든 함수에서 작동합니다. 내 코드를 컴파일 할 때

, 나는 선 cb = boost::bind(f, _1, 2)(x);에 대한 오류를 얻을 : 나는 cout << boost::bind(f, _1, 2)(x); 같이 직접 바인드를 사용하려고하면

'* f' cannot be used as a function 

, 나는 오류가 발생하지 않습니다.

내가 여기서 잘못 했습니까?

답변

2

(x)을 추가할까요?

cb = boost::bind(f, _1, 2); 

이 이미 2 번째의 인수가 2 f의 래퍼를 정의하고, 당신은

cb(x0) 

f(x0, 2)를 얻기 위해 호출 할 수 있습니다.

+0

'boost :: bind' 문서에있는 모든 예제가 그것을 수행하기 때문에'(x)'를 추가했습니다. 이제는 이것을 지적한 것처럼 분실 된 인자가'use()'로 채워지고 바인드가 끝났을 때 알려지지 않았기 때문에 명확 해 보인다. 이제 작동합니다. 고마워요! – Christoph

관련 문제