function object 연구의 8add_value_*

1434 단어
물건이 너무 많아서 멈추고 몇 가지 기본적인 템플릿류를 자세히 볼 필요가 있어요. 여기서add_value_*템플릿
template< class T, int I > struct add_value_2
{
    typedef boost::arg<I> type;
};

template< class T > struct add_value_2< T, 0 >
{
    typedef _bi::value< T > type;
};

template<class T> struct add_value
{
    typedef typename add_value_2< T, boost::is_placeholder< T >::value >::type type;
};

이것은 템플릿 특화 응용이다.boost::arg을 전달할 때 boost::is_placeholder:value에서 N의 값을 가져옵니다.is_placeholder 앞에서 소개한 바와 같이 T가 boost인지 아닌지를 판단하는 것입니다::arg 형식,value가 1이면 0입니다.
0이 되면 컴파일러는add_value_2 템플릿, 여기 있습니다_bi::value 템플릿, 정의 보기:
template<class T> class value
{
public:

    value(T const & t): t_(t) {}

    T & get() { return t_; }
    T const & get() const { return t_; }

    bool operator==(value const & rhs) const
    {
        return t_ == rhs.t_;
    }

private:

    T t_;
};
이 틀은 매우 간단합니다. 우리가 자주 쓰는 것입니다.T 형식의 매개 변수를 구성원 변수로 저장하고 get 방법으로 이 변수를 가져옵니다.복사부치 함수도 제공했다.
따라서 0의 경우 type 유형은_bi::value.
그렇지 않으면 첫 번째 add_ 를 사용합니다.value_2 템플릿, 이때 유형add_value_2::type은 boost::arg
요약:
add_value 템플릿의 기능은 boost::arg 형식을 T 템플릿 매개 변수로 받아들이는 것입니다.add_value::type은 boost::arg입니다.
T 템플릿 매개 변수가 boost::arg 형식이 아니라면add_value::type은_bi::value

좋은 웹페이지 즐겨찾기