문제
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);
.
제휴하지 않습니다 StackOverflow