이 프로그래밍 기술은 무엇입니까? (부스트 라이브러리)

StackOverflow https://stackoverflow.com/questions/809827

  •  03-07-2019
  •  | 
  •  

문제

Boost 라이브러리의 Program_options의 예를 이해하려고합니다.http://www.boost.org/doc/libs/1_38_0/doc/html/program_options/tutorial.html#id3761458)

특히이 부분 :

desc.add_options()
    ("help", "produce help message")
    ("compression", po::value<int>(), "set compression level")
;

그는 정확히 무엇을하고 있는데 어떤 기술이 무엇입니까?

이 부분은 desc.add_options ()가 함수 호출 일 수 있지만 다른 사람은 어떻게 여기에 맞습니까? 이것은 어떤 종류의 연산자 과부하입니까?

감사!

도움이 되었습니까?

해결책

"add_options ()"함수는 실제로 untctor, 즉, () 연산자를 무시하는 객체입니다. 이것은 다음 기능 호출을 의미합니다

desc.add_options() ("help", "produce help message");

실제로 확장됩니다

desc.add_options().operator()("help", "produce help message");

"Operator ()"는 또한 functor를 반환하여 표시된대로 호출을 연결할 수 있습니다.

다른 팁

아마도 add_options ()는 "체인"(매우 유용한 기술, BTW)을 지원하기 위해 Operator ()가 과부하 된 일종의 functor를 반환합니다.

오버로드 (...)를 사용하면 함수처럼 작동하는 클래스를 만들 수 있습니다.

예를 들어:

struct func
{
    int operator()(int x)
    {
        cout << x*x << endl;
    }
};

...

func a;
a(5); //should print 25

그러나 Operator ()를 반환하는 경우 a 대상에 대한 언급, 그런 다음 연산자를 "체인"할 수 있습니다.

struct func
{
    func& operator()(int x)
    {
        cout << x*x << endl;
        return *this;
    }
};

...

func a;
a(5)(7)(8); //should print 25 49 64 on separate lines

a (5)가 a를 반환하기 때문에 (a (5)) (7)은 다소 동일합니다. a(5); a(7);.

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