boost::function과boost::bind 함수 사용에 대한 소감
5142 단어 function
Boost:::function은 함수 패키지이자 함수 템플릿으로 같은 반환 유형, 같은 매개 변수 유형, 그리고 같은 매개 변수 개수의 서로 다른 함수를 대체할 수 있습니다.
1 #include<boost/function.hpp>
2 #include<iostream>
3 typedef boost::function<int(int ,char)> Func; 4
5 int test(int num,char sign) 6 { 7 std::cout<<num<<sign<<std::endl 8 } 9
10 int main() 11 { 12 Func f; 13 f=&test; //or f=test
14 f(1,'A'); 15 }
이렇게 하면 서로 다른 곳에서 서로 다른 함수로 f를 대체하면 C++와 유사한 다태적 효과를 얻을 수 있다.
그러나 이렇게 하면 일정한 한계가 있다. 예를 들어 내가 실현하고자 하는 스레드 탱크는 서로 다른 임무를 수행해야 한다. 이런 임무의 반환 유형, 함수 매개 변수 개수, 매개 변수 유형은 틀림없이 다르기 때문에 위의 방법으로 실현할 수 없다. 그러면 어떻게 함수 템플릿을 정의하여 각종 반환 유형, 함수 매개 변수 개수, 매개 변수 유형이 다른 각종 함수를 포함할 수 있겠는가?
우리는 다음과 같은 유형을 정의할 수 있다
1 typedef boost::function<void()> Func; 2 //or 3 typedef boost::function<void(void)> Func;
void 유형(공 유형)은 사실 C의 네 가지 데이터 유형 중 하나이고 나머지 세 가지는 기본 유형, 구조 유형, 지침형이다.
빈 형식은 주로 반환 형식과 함수 파라미터를 수식하는 데 사용되며, 정의 변수를 사용할 수 없습니다.voidi는 오류입니다.
빈 형식은 추상적인 기류로 정의된 변수를 사용할 수 없지만 모든 유형을 표시할 수 있다. 이렇게 이해하기 어렵지 않다.void*바늘은 강제로 다른 유형의 바늘로 바꾸지 않아도 된다.
void 형식의 반환 형식은 우리가 여러 가지 다른 유형을 반환할 수 있음을 나타냅니다. 그러면 우리는 어떻게 매개 변수를 전송합니까?boost::bind를 사용할 수 있습니다.
1 #include<boost/function.hpp>
2 #include<boost/bind.hpp>
3 #include<iostream>
4 typdef boost::function<void(void)> Func; 5
6 int test(int num) 7 { 8 std::cout<<"In test"<<std::endl; 9 } 10
11 int main() 12 { 13 Func f(boost::bind<test,6>); 14 f(); 15 }
bind를 사용하여 각 매개 변수를 전송하여 통용되는 함수 템플릿을 형성합니다.
그러나 f () 의 반환 값은void 형식이기 때문에 다음과 같이 쓸 수 없습니다.
1 int result=f(); 2 //or 3 std::cout<<f()<<std<<endl;
그러나 상관없다. 우리는 매개 변수에서 결과를 전달할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.