4-0
using namespace std;
using namespace boost;
using namespace mpl::placeholders;
template<typename T>
struct is_a{
static const bool value = 0;
};
template<typename T>
struct is_b
{
static const bool value = boost::is_pointer<T>::value;
typedef mpl::bool_<value> type;
};
int main(){
cout<<mpl::or_<is_b<int*>,is_a<int*> >::value<<endl;//is_a没有type成员,如果特化会提示“参数必须是个类型”
cout<<mpl::or_<is_b<int*>,is_a<int*> >::value<<endl;//错误
return 0;
}
4-1
#include<boost\mpl\bool.hpp>
using boost::mpl::bool_;
template<bool,typename T2>
struct logical_and_imp
{
static const bool value = T2::value;
typename typedef T2::type type;
};
template<typename T2>
struct logical_and_imp<false,T2>
{
static const bool value = false;
typedef bool_<false> type;
};
template<typename T1,typename T2>
struct logical_and:logical_and_imp<T1::value,T2>::type{};
or原理一样,把false改true就可以了,没有用静态判断,所有T2 T1没有type成员继承时会出现一堆错误
4-2 链表没写出来,只好将所有模板写出来再各特化一次,其实如果用eval_if可以简化。