문제

함수 호출의 기본 매개 변수가있는 C / C ++ 기능 헤더를 작성하는 좋은 방법이 있습니까?

기능이있는 헤더가 있습니다.

int foo(int x, int y = 0);

많은 기능 이이 기능을 부르는 대형 코드 기반에서 작업하고 있으며이 기본값에 따라 다릅니다. 이 기본값은 이제 역동적 인 것으로 변경해야하며 할 수있는 방법을 찾고 있습니다.

int foo(int x, int y = bar());

여기서 bar ()는 일부 시스템 매개 변수를 기반으로 기본값을 생성하는 일부 기능입니다. 또는이 기능 프로토 타입은 다음과 같습니다.

int foo(int x, int y = baz.bar());

여기서 BAZ는 헤더 파일 내에서 인스턴스화되지 않은 객체에 속하는 함수입니다.

도움이 되었습니까?

해결책

그림을 이동! 작동합니다. C ++ 함수의 기본 인수

다른 팁

두 가지 과부하 기능을 사용합니다.

int foo(int x, int y);

int foo(int x){return foo(x,bar);}

전달 함수를 상환하면 성능 페널티가 작을 수 있습니다. 비 헤더 파일로 본체를 줄을 떼지 않으면 성능 비용이 작을 수 있지만 구현 및 커플 링 감소에 훨씬 더 많은 유연성이있을 수 있습니다.

예. 당신이 쓴 것이 작품입니다.

첫 번째 선언에서 옵션 매개 변수를 단순히 제거하고 단일 매개 변수 과부하를 제공하는 데 무엇이 문제입니까?

int foo(int x)
{
    Bar bar = //whatever initialization
    return foo(x,bar.baz());
}

int foo(int x,int y)
{
  //whatever the implementation is right now
}

나는 이것이 동적 기본값을 사용하는 것보다 훨씬 깨끗하고 유연한 경향이 있다고 생각합니다.

표준, 8.3.6 절 (기본 인수), 단락 5에서는이 접근법 만 사용하여 예제를 제시합니다. 구체적으로, 그것은 기본 인수가 있다고 주장합니다 표현, 이름 조회 및 유형 호환성과 같은 제한 사항이 있지만 기능 호출이 적용됩니다.

내 직장에서 우리는 다음과 같은 서명을 사용했습니다.

void An_object::An_object(
  const Foo &a,
  const Bar &b,
  const Strategem &s = Default_strategem()
);

클라이언트가 클래스 생성자에서 동작을 무시할 수 있도록합니다. 번역가의 성능에 영향을 미치는 조건부 행동에 유용했습니다 ...

접선이지만, 그것은 나에게 의존성 문제를 도로로 가져올 것 같은 것처럼 보입니다. 나는 stbuton.myopenid.com의 접근 방식과 함께 갈 것입니다.

함수/객체의 선언이 범위에있는 한,이 맥락에서 글로벌 함수를 호출하거나 글로벌 객체를 참조하는 것이 완벽하게 유효해야합니다. (좋은 디자인 측면에서) 권장이거나 좋지 않을 수도 있지만 작동해야합니다.

Bar ()를 정적 멤버 함수로 만들어보십시오. 이렇게하면 정적 클래스가있는 스코프에 액세스 할 수있는 프로그램의 일부가 가능합니다. 예를 들어:

클래스 foo {public :

정적 int bar (); };

그러면 당신은 다음을 선언합니다 :

int foo (int x, int y = foo :: bar ());

다른 객체가 필요한 경우 대신 객체의 인스턴스를 전달하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top