boost::function 소개
15491 단어 function
1. 소개
Boost.Function 라이브러리는 클래스 패밀리의 함수 객체에 대한 패키지를 포함합니다.그것의 개념은 광의적인 리셋 함수와 매우 비슷하다.함수 바늘과 같은 특성을 가지고 있지만 호출된 인터페이스를 포함하고 있다.함수 바늘은 지방에서 호출되거나 리셋 함수로 사용할 수 있다.boost.함수 바늘을 대체하고 더 큰 유연성을 제공할 수 있습니다.
2. 사용
Boost.Function에는 다음과 같은 두 가지 형식이 있습니다.
기본 설정 형식
휴대용 형식
boost::function
boost::function2
그러나 휴대용 형식은 모든 컴파일러가 지원하는 것이 아니기 때문에 여기에서 나는 첫 번째 형식만 소개한다.
2.1 일반 함수
우리는 다음과 같은 예를 볼 수 있다.
1
void
do_sum(
int
*
values,
int
n)
2
{
3
int
sum(
0
);
4
for
(
int
i
=
0
; i
<
n;
++
i)
5
{
6
sum
+=
values[i];
7
}
8
cout
<<
sum
<<
endl;
9
};
10
int
_tmain(
int
argc, _TCHAR
*
argv[])
11
{
12
boost::function
<
void
(
int
*
values,
int
n)
>
sum;
13
sum
=
&
do_sum;
14
int
a[]
=
{
1
,
2
,
3
,
4
,
5
};
15
sum(a,
5
);
16
return
0
;
17
}
sum는 광범위한 함수 대상으로 이해할 수 있습니다. 함수 do_만 저장합니다.sum, 그리고 다시 호출합니다.
2.2 구성원 함수
많은 시스템에서 클래스의 구성원 함수에 대한 리셋은 특수한 처리를 해야 한다.이 특수한 처리는 바로 매개 변수 귀속이다.물론 이것은 우리가 토론한 범위를 넘어섰다.boost:::function 구성원 함수 사용에 대한 다음 코드를 볼 수 있습니다.
1
class
X{
2
public
:
3
int
foo(
int
a)
4
{
5
cout
<<
a
<<
endl;
6
return
a;
7
}
8
};
9
int
_tmain(
int
argc, _TCHAR
*
argv[])
10
{
11
boost::function
<
int
(X
*
,
int
)
>
f;
12
f
=
&
X::foo;
13
X x;
14
f(
&
x,
5
);
15
return
0
;
16
}
우리는 클래스의 구성원 함수에 대한 대상화는 문법에서 큰 차이가 없다는 것을 발견했다.
3. 전형적인 예
위의 몇 가지 예는 boost::function의 작용을 나타내지 못했는데 여기에 예를 하나 쓰고 있다.예를 들어 프로그램이 어느 곳에 실행될 때 어떤 함수를 귀속하고 싶지만 바로 실행하고 싶지 않으면 우리는 함수 대상을 성명하고 이 대상에 해당하는 함수를 귀속시켜 다른 일을 한 다음에 귀속된 함수를 실행할 수 있다. 코드는 다음과 같다.
1
void
print(
int
a)
2
{
3
cout
<<
a
<<
endl;
4
}
5
typedef boost::function
<
void
(
int
)
>
SuccessPrint;
6
int
_tmain(
int
argc, _TCHAR
*
argv[])
7
{
8
vector
<
SuccessPrint
>
printList;
9
SuccessPrint printOne
=
boost::bind(print, _1);
10
printList.push_back(printOne);
11
SuccessPrint printTwo
=
boost::bind(print, _1);
12
printList.push_back(printTwo);
13
SuccessPrint printThree
=
boost::bind(print, _1);
14
printList.push_back(printTwo);
15
//
do something else
16
for
(
int
i
=
0
; i
<
printList.size();
++
i)
17
printList.at(i)(i);
18
return
0
;
19
}
상기 코드에서 먼저 함수 대상 typedef boost::function
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.