function object 연구의 18bind_t
#ifndef BOOST_NO_VOID_RETURNS
template<class R, class F, class L> class bind_t
{
public:
typedef bind_t this_type;
bind_t(F f, L const & l): f_(f), l_(l) {}
#define BOOST_BIND_RETURN return
#include <boost/bind/bind_template.hpp>
#undef BOOST_BIND_RETURN
};
#else
구현 코드가 많기 때문에 hpp 파일에 넣고 bind_t 내부는 include로 이 파일을 가져옵니다.이런 용법은 매우 재미있다.
여기서 멤버 변수는 다음과 같습니다.
private:
F f_;
L l_;
따라서 bind_t 구조 함수는 매개 변수 f와 l를 개인 변수에 저장합니다.두 가지 유형을 동시에 정의합니다.
typedef bind_t this_type;
typedef typename result_traits<R, F>::type result_type;
여기result_타입은 R입니다.이어서 Operator () (T...) 를 제공했다에 대한 재부팅 작업자입니다.
T는void일 수도 있고 여러 boost::arg
result_type operator()()
{
list0 a;
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
result_type operator()() const
{
list0 a;
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
이 두 가지는 무참한 형식이다.
l_() 이 문장은operator () () 함수를 호출한 것입니다.설명l_함수 개체입니다.
그리고 매개 변수가 없는list0 대상 a를 전달합니다.
template<class A1> result_type operator()(A1 & a1)
{
list1<A1 &> a(a1);
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
template<class A1> result_type operator()(A1 & a1) const
{
list1<A1 &> a(a1);
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
이 두 개와 앞의 차이는 많지 않다. 바로 매개 변수가 많아졌다. 반면list1에서 l_를 호출한다.변수의operator()().
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)
{
list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const
{
list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
}
이 두 개는 9개의 매개 변수를 수신하는 형식이다.
요약: 템플릿bind_t는 두 개의 매개 변수를 받아들인다. 하나는 실행하는 함수 f(또는 함수 바늘 등 형식), 하나는functionobjectl이다.
또한 많은 operator () () 를 제공하여 0-9에서 서로 다른 수의 매개 변수를 수신하고 내부적으로functionobjectl의operator () () 를 실행하여 f를 실행합니다. 매개 변수는 실행할 때 외부 호출 프로그램에서 전송됩니다.
accept 지원visitor 모드도 제공합니다.
return type도 외부 프로그램에서 지정할 수 있으며, 템플릿 매개 변수 R로bind_t.
여기에 호출된 예가 있습니다.
typedef typename _bi::list_av_1<A1>::type list_type;
return _bi::bind_t<R, F, list_type> (f, list_type(a1));
그래서 이때 l 매개 변수는list_type(a1), 즉list_av_1이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.