캡쳐 절이있는 λ 식으로 래핑하여 멤버 함수를 std::function
에 쉽게 바인딩 할 수 있습니다.Visual Studio 11에서 멤버 함수를 std :: function에 직접 바인딩하는 방법은 무엇입니까?
class Class
{
Class()
{
Register([=](int n){ Function(n); });
}
void Register(std::function<void(int)> Callback)
{
}
void Function(int Number)
{
}
};
하지만 다음과 같이 직접 바인딩하고 싶습니다.
// ...
Register(&Class::Function);
// ...
저는 C++ 11 표준에 따라 이것이 지원되어야한다고 생각합니다. 그러나 Visual Studio 11에서는 이러한 컴파일러 오류가 발생합니다. '줄 바꿈': '클래스 *'
오류 C2647에 대한 '내부'에서 변환 할 수 없습니다 '. *'할 수 없다는 '무효 역 참조 (__thiscall 클래스 :: *) (INT 오류 C2440
비 정적 멤버 함수는 implic이 있기 때문에) INT '나는 C++ 11 표준에 따라 생각
작동하지만 구문 모든 클래스 참조가 동일하다 제약 하에서 단순화 될 수 있는가? – danijar
@danijar 클래스 참조가 모두 동일하다는 것은 무엇을 의미합니까? 'Class' 인스턴스에 대한 포인터를 전달해야합니다. 어느 쪽이 당신에게 달려 있습니다. – juanchopanza
오른쪽. 그리고이 인스턴스는 항상 동일합니다. 이제이 정보를 염두에두고'bind (& Class :: Function, this, _1)'을 줄이고 싶습니다. 그래서, 내용 적으로,'bind'는 쓸데없는 것입니다. 거기에 기술적 인 방법을 없애거나 전달 후 함수 내에서 바인딩을 수행 할 수 있습니까? – danijar