用next_value类来创建唯一值

ZDNet软件频道 时间:2003-06-27 作者:ZDNet China |  我要评论()
本文关键词:cpp
在某些情况下,你在处理字符串集合(其中每个字符串的值都是唯一的,即不会重复)的同时又希望允许字符串默认值的存在。
本文译自Builder.com,未经许可请勿转载在某些情况下,你在处理字符串集合(其中每个字符串的值都是唯一的,即不会重复)的同时又希望允许字符串默认值的存在。

例如,假设你在开发一个多玩家游戏,其中每个玩家都用唯一的名字登录该游戏。如果用户没有输入任何名字,那么你希望给它赋一个默认值,该默认值也是唯一的(即与其它已有玩家的名字不重复)。

如果你像这样给出某人名字:guest1、guest2等等,这样如果有一个玩家故意选择按默认值名字,就出现问题了。这样,如果分配了guset1默认名字,那么可能有两个用户都有同样的名字。在这里,next_value的概念就可以帮助你解决这个问题。

当使用next_value类时,它用两个简单的步骤来解决这个问题:

  1. 它测试下一个值是否唯一。
  2. 如果下一个值已经存在,那么它重复步骤1一直找到一个合适的值。

下面是next_value类的代码:

template< class return_type>
structnext_value
{
    return_type next()
    {
        while ( is_current_value_used())
            increment();
        return get_current_value();
    }

protected:
    typedefnext_value< return_type> this_class;
    next_value()
    {}
    //允许导出类的考虑构造(copy-construction)。
    next_value( const this_class & from)
    {}
protected:
    virtual boolis_current_value_used() const = 0;
    virtual void increment() = 0;
    virtual return_typeget_current_value() const = 0;
};

你可以继承该类,实现is_current_value_usedincrementget_current_value。你可以用next()函数来得到客户代码的下一个唯一值。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134