2016-08-21 2 views
-2

나는 많은 자원을 검색 한 그들이 제공하는 예, 그것은 다음과 같습니다가 제공 이전 매개 변수를 반복하지 않고 기본 매개 변수를 제공하려면 어떻게해야합니까?

bar(b : 'Z'); 

만 : 같은

void bar(int a = 4, char b = 'A') 
{ 
} 

this resource에 따르면이 호출 할 수 있습니다 나 오류 identifier "b" is undefined. Visual Studio 2015 업데이트 3 엔터프라이즈를 사용하고 있습니다.

두 번째 매개 변수 만 지정하는 방법은 무엇입니까?

+5

제안입니다. –

+0

그건 그렇고,이 제안은 아마도 C++ 기능이 호출되는 방식의 기술적 인 측면과 충돌하기 때문에 구현되지 않을 것이고, 링크 가능한 라이브러리가 제공되는 라이브러리와 호환되지 않는 것입니다. 그곳에. –

+0

좋아, 폐업 할 것입니다 – mihkov

답변

7

당신이 링크하는 종이는 단지 제안서 일뿐입니다 .¹. 사용하려는 메커니즘은 (현재) 표준에서 정의 된 C++의 일부가 아닙니다. 따라서 컴파일러가이를 구현할 것으로 기대할 수는 없습니다.

현재 다른 표준 대안이 없습니다. 일부 매개 변수를 설정하려면 함수 선언 앞에있는 모든 매개 변수도 제공해야합니다.

사용자 코드로이 기능을 에뮬레이트하기 위해 비슷한 것을 구현하거나 Boost Parameter과 같은 것을 사용할 수 있습니다. 그것이 좋은 생각인지 아닌지는 논쟁의 여지가 있습니다. 모든 것이 너무 일반적이어서 다른 프로그래머에게는 혼란 스러울 수 있습니다.


1 이것은 언어 문제 일 수 있습니다. "제안서"는 누군가가 말하는 것이고, 상태는 그렇지 않을 것이라고합니다.

0

하나의 가능한 솔루션은 std::bind을 해당 네임 스페이스에 정의 된 자리 표시 자와 함께 사용하는 것일 수 있습니다. 예를 들어 : 다른 대답 제안으로

void bar(int a = 4, char b = 'A') { 
} 

using namespace std::placeholders; 
auto f = std::bind(bar, 2, _2); 
f('Z'); // equivalent to bar(2, 'Z'); 

, 거기 std::bind 표현식은 함수 선언에서 기본 인수를 사용하게 할 수있는 방법은 없습니다 만, 적어도 당신이 그것을에 인수 중 하나만을 지정할 수 있습니다.