TypeList每个元素之间的.....

sevecol 2003-08-13 04:44:08
情况是这样的:

现在有一组状态集,每个状态可以相互转化。(设定状态的表示值是int,设定每两个状态值之间的差值是唯一的)
比如说有状态
A,B,C,状态值分别是(1,2,4)

目的:
得到一个TypeList,里面包含了状态之间的转化的所有情况(假设每两个状态都能互相转化).

我的实现
template<typename F,typename H=F,typename T=F>
class DTypeList
{
public:
typedef F List;
typedef TypeList<Int2Type<H::Head::value-T::Head::value>,typename DTypeList<List,H,typename T::Tail>::Result> Result;
};

template<typename F,typename T>
class DTypeList<F,T,NullType>
{
public:
typedef F List;
typedef typename DTypeList<F,typename T::Tail,F>::Result Result;
};

template<typename F,typename T>
class DTypeList<F,NullType,T>
{
public:
typedef F List;
typedef NullType Result;
};

利用一个F来保存完整的TypeList,首先取出TypeList中的第一个,和TypeList里面的每一个进行操作,当后一个TypeList是NullType的时候,我们将第一个TypeList设置成下一个,第二个TypeList为我们保存的完整的TypeList, 一直到第一个TypeList的参数是NullType,我们就产生了一个新的TypeList饱含了所有状态之间的转换的可能。

但是我觉得我的实现有点麻烦,不知道有没有更加简单的实现?
大家给点意见,先谢了。


...全文
40 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
短歌如风 2003-08-14
  • 打赏
  • 举报
回复
如果位置很重要,我想可能就只能象楼主那样保存并传递原list了。
短歌如风 2003-08-14
  • 打赏
  • 举报
回复

如果位置不要,可以试试下面这样:

template <class T, class U> struct _state_list;

template <class T> struct _state_list<T, NullType>
{
typedef Typelist<Int2Type<0>, NullType> Result;
};

template <class T, class U, class V> struct _state_list<T, Typelist<U, V> >
{
typedef Typelist<Int2Type<0>, Typelist<Int2Type<T::value - U::value>, Typelist<Int2Type<U::value - T::value>, typename _state_list<U, V>::Result> > > Resut;
};

template <class T> struct state_list;
template <class T, class U> struct state_list<Typelist<T, U> >
{
typedef typename _state_list<T, U>::Result Result;
};

为了加强对模板参数的检查,都只实现特化版本。
我没有测试,可能有错误。
sevecol 2003-08-14
  • 打赏
  • 举报
回复
to aflyinghorse():

对,并且对于每个差值建立不同的类Int2Type<>.
aflyinghorse 2003-08-14
  • 打赏
  • 举报
回复
楼主的意思是不是这样
对于(1,2,4)
1和1,1和2,1和4 得到(0,-1,-3)
2和1,2和2,2和4 得到(1,0,-2)
4和1,4和2,4和4 得到(3,2,0)
sevecol 2003-08-14
  • 打赏
  • 举报
回复
将TypeList的里面的每两元素之间产生新的类型加入到一个新的TypeList中.
aflyinghorse 2003-08-14
  • 打赏
  • 举报
回复
看不明白...
能不能再解释一下
lemonutzf 2003-08-13
  • 打赏
  • 举报
回复
Modern C++ Design

写得蛮好的,我看也就如此了吧

泛型设计到底.......... :)
sevecol 2003-08-13
  • 打赏
  • 举报
回复
up.............

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧