2014-11-29 7 views
0

이러한 매개 변수를 기반으로 여러 작업을 수행해야하는 여러 매개 변수가있는 함수가 있습니다. 하지만이 함수를 호출 할 때 함수가 필요하지 않을 수 있습니다.선택적 매개 변수를 사용하여 함수 작성하기

예를 들어 내 함수에는 매개 변수 (int x, int bin, int value)가 있지만 때로는 호출 할 때 int 값을 사용하여 함수의 일부를 평가하지 않으려합니다. 이것을 어떻게 할 수 있습니까? 나는 그것을 지정하지 않으면 인수를 0으로 기본 설정하는 선택적 인수를 사용한다고 들었다. 그러나 그것은 내가 원하는 것이 아니다. 필자가 원하는 것은 "int value"값을 제공하면이 값을 사용하여 함수의 일부를 평가하고 그렇지 않으면 무시하도록합니다.

void foo(int x, int bin) { 
    //... 
} 

void foo(int x, int bin, int value) { 
    foo(x, bin); 
    // extra stuff using value... 
} 

을하지만 당신은 또한 value 포인터하고는 사용하지 않아야 의미하는 nullptr을 사용할 수

+2

나는이 기능을 함수 오버로딩으로 수행 할 수 있다고 믿는다. (나는 생각한다) – Maddy

답변

3

나는 함수 오버로드를 사용하는 것이 좋습니다.

+0

이것은 무엇을 의미 하는가? 해당 특정 인수없이 함수를 호출하면 첫 번째 함수가 사용되지만 매개 변수로 호출하면 두 번째 함수가 사용됩니까? – CStarAlgebra

+2

@NoahSteinberg 정확히 그 의미입니다. –

1

다른 옵션이 있습니다. 이 경우 함수가 두 개의 매개 변수 (value) 만 사용하여 호출되는 경우이 코드는 센티널 (이 경우 -1)으로 초기화되며 코드에서 확인할 수 있습니다. 0, -1, 또는 int의 아마 최대 값이 될 수있는 있지만 일부 잘못된 값이있는 경우

void foo(int x, int bin, int value=-1) { 
    // x stuff 
    // bin stuff 
    if (value != -1) { 
    // value stuff 
    } 
} 

에만 작동합니다. 함수 오버로딩은 아마도 더 나은 선택 일 것이다.

+1

또는'boost :: optional'. 또는 처음부터 별도의 기능을 사용하면 완전히 다른 일을하는 경우 훨씬 더 의미가 있습니다. –

관련 문제