개체의 멤버 변수를 설정할 수있는 boost :: 함수를 만들려고합니다. 나는 내가하려고하는 (그리고 실패한) 것에 대해 생각할 수있는 가장 간단한 예를 만들었다. 나는 boost :: bind에 대한 이해를 가지고있는 것처럼 느껴지지만, 나는 새로운 것을 향상시키고 boost :: function을 잘못 사용하고 있다고 생각한다.boost :: function 및 boost :: bind를 멤버 변수에 사용
#include <iostream>
#include <Boost/bind.hpp>
#include <boost/function.hpp>
class Foo
{
public:
Foo() : value(0) {}
boost::function<void (int&)> getFcn()
{
return boost::function<void (int&)>(boost::bind<void>(Foo::value, this, _1));
}
int getValue() const { return value; }
private:
int value;
};
int main(int argc, const char * argv[])
{
Foo foo;
std::cout << "Value before: " << foo.getValue();
boost::function<void (int&)> setter = foo.getFcn();
setter(10); // ERROR: No matching function for call to object of type 'boost::function<void (int &)>'
// and in bind.hpp: Called object type 'int' is not a function or function pointer
std::cout << "Value after: " << foo.getValue();
return 0;
}
내가 그냥 잘못이 모든 일에 대해 갈 (10) 오전 푸 :: 값을 설정 기능을 사용하려면 라인 (28)에 오류, 데
? 이 모든 것을 위해 boost를 사용하는 대신 int * 나 something을 그냥 돌려 주어야합니까? 왜냐하면 내가 'getFcn()'을 호출하는 이유는 실제 프로젝트에서 메시징 시스템을 사용하고 있고 원하는 데이터가있는 객체가 더 이상 존재하지 않기 때문에 getFcn은 빈 부스트 :: 함수를 반환하기 때문입니다. 하지만 int로 추측 * 아무것도 찾을 수 없으면 NULL을 반환 할 수 있습니다.
나는이 작업을 수행 할 모든 변수에 대한 클래스의 setter 메소드를 피하기 위해 노력하고있어. 변수를 직접 변경하는 방법을 찾고 있습니다. boost :: function을 그렇게 사용하지 않을 수 있습니까? –
@ 닉 포스터, 나는 믿지 않는다. Boost.Function은 함수처럼 작동하는 것들에 대한 래퍼입니다. 당신은 그것을'int'로 감싸려고합니다. – Vikas
충분히 좋았을 텐데, bind를 사용하여 멤버 변수에 바인드 할 수 있었기 때문에'member'를 사용하여 멤버 변수를 설정할 수 있다고 가정했습니다. –