는바인드에서 반환 된 객체가 추가 인수를 무시하는 이유는 무엇입니까?
void f(int x, int y);
, 나는 두 개의 인자를받는 함수가 있다고 가정하고 나는 그들 중 하나를 바인딩합니다. 다음과 같이 나는 std::bind
를 사용할 수 있습니다
auto partiallyBoundF = std::bind(f, 10, _1);
partiallyBoundF
는 하나의 인자를,하지만 난 더 이상 그것을 호출 할 수 있습니다.
partiallyBoundF(20, 0);
partiallyBoundF(0, 44, -99, "Hello", 4.5, true, []{});
추가 인수를 전달하기 위해 허용 개체의 목적은 bind
에서 반환 무엇 : 첫 번째 넘어 인수는 심지어 어떤 의미가있는 종류 일 필요 없다? 호출 오류를 컴파일하여 다른 곳에서는 거부 될 수 있습니다.
어떤 컴파일러입니까? 나는 이것이 부적합한 컴파일러일지도 모른다는 것을 추측 할 수있다. 왜냐하면 그러한 추가적인 인수를 허용하는 것은 실제로는 의미가 없기 때문이다. 예를 들어, MSVC는 가변적 인 템플릿을 에뮬레이션합니다. 각 템플릿은 가능한 최대 템플릿 인수를 취하고 기본값을 일부 NIL 유형으로 기본 설정합니다. 어쩌면 그게 뭔가 행동의 원인일까요? –
@ChristianRau : 표준의 일부입니다. 그것은 TR1의 일부이기도합니다. 20.8.2/4는 variadic-templatized'operator()'에 대한 예상 된 구현이 인수의 유형이나 수에 관계없이 전달 된 것을 취하도록 주석을 작성합니다. TR1도 비슷한 문구를 가지고 있습니다. – KnowItAllWannabe
당신의 경우,'N = sizeof ... (bound_args)'(호출을 바인딩하는 args의 수)는 유효한 표현식이어야한다. 20.8.9.1.2/2를 보아라. 20.8.2/1. 편집 : 그것은 그것을 호출하는 다른 방법을 허용하지 않습니다. – dyp