나는 책을 읽고, 코드 아래가 오전 :std :: bind가 함수에 전달 된 인수의 수를 늘리는 방법은 무엇입니까?
mActionBinding[Fire].action = derivedAction<Aircraft>(
std::bind(&Aircraft::fire, _1));
유도 작용에 전송되는 인수가 두 arguemnts 나중에 전송됩니다.
template<typename GameObject, typename Function>derived action function
std::function<void(SceneNode&, sf::Time)> derivedAction(Function fn)
{
return [=](SceneNode& node, sf::Time dt) expression
{
assert(dynamic_cast<GameObject *>(&node) != nullptr);
fn(static_cast<GameObject &>(node), dt);
};
}
화재의 선언은 항공기 클래스에있는 이것이다 : 나는 표준 : : 바인딩에 대한 몇 가지 기사를 읽고
class Aircraft:public SceneNode
{
public:
void fire()
};
하지만, 솔직히 나는 이걸 이런 건은 보지 못했다 훨씬 더 복잡한.
1 기반 내 독서에,이 표준 : 바인드가 세 개의 인수 :
은 내 질문을 정렬 할 수 있습니다! 멤버 함수, 암시 적 클래스 이름 및 _1 그것은 사실입니까? 우리가 derivedAction에서 호출 할 때 static_cast<gameObject &>(node)
대신 "this"가 전송됩니다.
2-fire에는 아무런 인자도 없습니다! (암시적인 this 제외) 왜 _1이 우리에게 오류를주지 않습니다? 어떻게 "dt"가 전송 될까요?
나는 조금 혼란 스럽다. 참고 문헌은 간단한 사용 예이며, std::bind
에 대한 다른 정보는 높이 평가 될 것이다.
@AmiTavory 님이 당신의 의견을받지 못했습니다. 무엇을 의미합니까? – shayan
'bind' 멤버 함수의 첫 번째 인수는 호출 될 인스턴스입니다. 일명 "impicit this"_ –
@Revolver_Ocelot ok, 두 번째 인수에 대해서는 매개 변수가 없지만 jt는이를 허용합니까? – shayan