나는 다음과 같은 한 :은에 콜백으로 멤버 함수를 지정 C++ 11
typedef std::function<bool (const std::string&)> SomethingCoolCb;
class ClassA
{
public:
void OnSomethingCool(const SomethingCoolCb& cb)
{
_cb = cb;
}
private:
SomethingCoolCb _cb;
};
class ClassB
{
public:
ClassB();
bool Juggle(const std::string& arg);
private:
ClassA _obj;
};
내가 :: _ OBJ ClassB가에 콜백으로 ClassB가 :: 저글링() 멤버 함수를 지정합니다. 적절한 방법은 (ClassB가의 생성자에서) (11) C++에서이 것이 할 것입니다 : 내가 이해에서
ClassB::ClassB()
{
_obj.OnDoSomethingCool(
[&](const std::string& arg) -> bool
{
return Juggle(arg);
});
}
를, 컴파일러는 위의 람다 코드 밖으로 표준 : 함수 객체를 만들 것입니다. 따라서 콜백이 호출되면 std :: function :: operator() 멤버를 호출하고 ClassB :: Juggle()을 직접 호출하는 대신 ClassB :: Juggle()을 호출합니다. 내가 덮개 밑에서 일어나는 일에 착각하지 않는다면, 모든 것이 비효율적 인 것처럼 보입니다. 더 좋은 방법이 있습니까?
람다 (예제에서와 같이)에서'this '를 캡처하는 것이 Visual Studio 2010에서는 잘 작동하지 않는다는 것에주의하십시오. –