使用c++11改写loki的TypeList(二)

2014-11-24 09:08:34 · 作者: · 浏览: 1
typedef typename erase::type inner_result;
public:
typedef typename concat::type type;
};
template<>
struct no_duplicate< nulllist >
{
typedef nulllist type;
};
//////////////////////////////////////////////////////////
template struct replace;
template
struct replace >
{
typedef typename concat>::type>::type type;
};
template
struct replace >
{
typedef typename concat >::type type;
};
template
struct replace
{
typedef nulllist type;
};
//////////////////////////////////////////////////////////
template struct replace_all;
template
struct replace_all >
{
typedef typename concat>::type>::type type;
};
template
struct replace_all >
{
typedef typename concat>::type >::type type;
};
template
struct replace_all
{
typedef nulllist type;
};
//////////////////////////////////////////////////////////
template struct reverse;
template
struct reverse >
{
typedef typename concat>::type, T>::type type;
};
template<>
struct reverse< nulllist >
{
typedef nulllist type;
};
复制代码
例子:
复制代码
#include
#include
#include "TypeList.h"#include
using namespace hi::mpl;
int main()
{
typedef typelist testlist;
typedef typelist tlist;
typedef typelist hlist;
typedef typelist<> elist;
typedef typelist ilist;
typedef testlist mylist;
std::cout << "length: " << length::value << std::endl;
bool b;
b = std::is_same::type, bool>::value;
std::cout << "is same: " << b << std::endl;
b = std::is_same::type, ilist>::value;
std::cout << "is same: " << b << std::endl;
std::cout << "indexof : " << indexof::value << std::endl;
b = std::is_same>::type, pop_front::type>::value ;
std::cout << "is same: " << b << std::endl;
b = std::is_same< erase::type, typelist>::value;
std::cout << "is same: " << b << std::endl;
b = std::is_same< no_duplicate::type, typelist>::value;
std::cout << "is same: " << b << std::endl;
b = std::is_same< replace::type, typelist>::value;
std::cout << "is same: " << b << std::endl;
b = std::is_same< replace_all::type, typelist>::value;
std::cout << "is same: " << b << std::endl;
b = std::is_same< reverse::type, typelist>::value;
std::cout << "is same: " << b << std::endl;
//std::cout << "is same: " << CompileTimeCount(int) << std::endl;
//std::cout << "is same: " << CompileTimeCount(int) << std::endl;
return 0;
}