c++11functions
function을 설명할 때, 포장된 함수 대상의 반환값 형식과 매개 변수의 형식을 제시해야 합니다.예를 들어 하나의 function을 설명하면 bool 형식을 되돌려주고 int 형식과float 형식의 매개 변수를 받아들일 수 있습니다. 아래와 같이 할 수 있습니다.
function
다음은 function의 비교적 중요한 몇 가지 인터페이스를 간략하게 소개한다.
function();
구조 함수가 부족하여 빈 함수 대상을 만듭니다.빈 function이 호출되면bad_function_콜의 이상.
template
이 범용 구조 함수는 호환되는 함수 대상, 즉 이러한 함수나 함수 대상을 받아들인다. 그 반환 유형은 구조된function의 반환 유형과 같거나 은식으로 변환할 수 있고, 그 매개 변수도 구조된function의 매개 변수 유형과 같거나 은식으로 변환할 수 있다.다른 function 실례를 사용하여 구성할 수도 있습니다.이렇게 하고 function g가 비어 있으면 구조된 function도 비어 있다.빈 함수 바늘과 빈 구성원 함수 바늘을 사용하면 빈 function이 생성됩니다.만약 이렇게 하고 function g가 비어 있다면, 구조된 function도 비어 있다.빈 함수 바늘과 빈 구성원 함수 바늘을 사용하면 빈 function이 생성됩니다.
template
이 구조 함수는 이전과 유사하지만, 받아들인 함수 대상은reference_wrapper에서 값을 통해 전달되는 것을 피하기 위해 함수나 함수 대상의 복사본을 생성합니다.이것은 함수 대상이 function의 서명과 호환되도록 요구합니다.
function& operator=(const function& g);
값 조작부호는 g의 함수나 함수 대상의 복사본을 저장한다.만약 g가 비어 있다면, 부여된 함수도 비어 있을 것이다.
template
이 범용 값 부여 조작부호는 호환되는 함수 바늘이나 함수 대상을 받아들인다.다른 function 실례 (서로 다르지만 호환되는 서명 포함) 로 값을 부여할 수도 있습니다.이것은 g가 다른 function 실례이고 비어 있으면 값을 부여한 함수도 비어 있다는 것을 의미한다.빈 함수 바늘이나 빈 구성원 함수 바늘을 지정하면function이 비어 있습니다.
bool empty() const;
이 구성원 함수는 함수나 함수 대상을 포함하고 있는지 여부를 나타내는 부울 값을 되돌려줍니다.목표 함수나 함수 대상이 호출될 수 있다면false로 되돌아옵니다.하나의function는 블의 상하문에서 테스트하거나 0과 비교할 수 있기 때문에 이 구성원 함수는 미래 버전의 라이브러리에서 취소될 수 있습니다. 사용하지 마십시오.
void clear();
이 구성원 함수는function을 제거합니다. 함수나 함수 대상에 더 이상 연결되지 않습니다.만약 function이 비어 있다면, 이 호출은 영향을 주지 않습니다.호출된 후,function은 비어 있을 것입니다.function을 비우는 가장 좋은 방법은 0을 부여하는 것이다.clear는 미래 버전의 라이브러리에서 취소될 수 있습니다.
result_type operator()(Arg1 a1, Arg2 a2, ..., ArgN aN) const;
조작부호를 호출하는 것은function를 호출하는 방법이다.빈 function을 호출할 수 없습니다. 그러면 bad_function_콜의 이상.호출 조작부호의 실행은function의 함수나 함수 대상을 호출하여 결과를 되돌려줍니다.
다음은 function을 사용하여 일반 함수, 함수 대상과 클래스의 구성원 함수를 포장하는 참고 코드를 제시한다.
1. 일반 함수
1 int Add(int x, int y)
2
3 {
4 return x+y;
5 }
6 function<int (int,int)> f = Add;
7 int z = f(2, 3);
2. 함수 대상
1 class CStudent
2 {
3 public:
4 void operator() (string strName, int nAge)
5 {
6 cout << strName << " : " << nAge << endl;
7 }
8 };
9
10 CStudent stu;
11 function<void (string, int)> f = stu;
12 f("Mike", 12);
3. 클래스의 구성원 함수
1 struct TAdd
2 {
3 int Add(int x,int y)
4 {
5 return x+y;
6 }
7 };
8
9 function<int (TAdd *, int, int)> f = TAdd::Add;
10 TAdd tAdd;
11 f(&tAdd, 2, 3); // , tAdd
다음은 함수 대상의 상태를 function으로 저장하는 상황을 살펴봅시다.다음 코드를 고려하십시오.
1 class CAdd
2 {
3 public:
4 CAdd():m_nSum(0) { NULL; }
5 int operator()(int i)
6 {
7 m_nSum += i;
8 return m_nSum;
9 }
10
11 int Sum() const
12 {
13 return m_nSum;
14 }
15
16 private:
17 int m_nSum;
18 };
19
20 int main()
21 {
22 CAdd add;
23 function<int (int)> f1 = add;
24 function<int (int)> f2 = add;
25 cout << f1(10) << "," << f2(10) << "," << add.Sum() << endl;
26 return 0;
27 }
여러분이 상상한 결과와 다를 수 있습니다. 위의 프로그램의 출력은 10, 10, 0입니다.우리는 같은 함수 대상을 두 개의 function에 값을 부여한 후에 각각 이 두 개의 function을 호출했지만 함수 대상 중 m_nSum의 상태가 유지되지 않았습니다. 문제는 어디에 있습니까?이것은 function의 부족한 행위가 그 함수 대상을 복사하는 것이기 때문에 f1과 f2에 저장된 것은 모두add 대상의 복사입니다. f1과 f2를 호출한 후add 대상의 값은 수정되지 않았습니다.
C++ 11에서 ref와cref 함수를 제공하여 대상의 인용과 자주 인용하는 포장을 제공합니다.함수 객체의 상태를 function에 올바르게 저장하려면 코드를 수정할 수 있습니다.
1 CAdd add;
2 function<int(int)> f1 = ref(add);
3 function<int(int)> f2 = ref(add);
또한 두 function 사이에 값을 부여할 때 원본 function이 함수 대상의 복사본을 저장하면 목표 function이 저장하는 것도 함수 대상의 복사본이다.원본function이 함수 대상의 인용을 저장하면 목표function이 저장하는 것도 함수 대상의 인용입니다.
- 이 문서는 창세 소프트웨어 팀 블로그에서 유래한 것으로, 원문 주소:http://www.cnblogs.com/hujian/archive/2012/12/07/2807605.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.