用is_*函数轻松编写通用代码

ZDNet软件频道 时间:2003-03-03 作者:BUILDER.COM |  我要评论()
本文关键词:cpptips
当处理通用编程时,开发者往往有需要使用一元判断来检测某个范围内的所有元素是否小于、小于或者等于、大于……某个任意值。

当处理通用编程时,开发者往往有需要使用一元判断来检测某个范围内的所有元素是否小于、小于或者等于、大于……某个任意值。

你可以这样写代码:

上面的代码显得很罗嗦。你总是需要以std::bind2nd( some_functor< type>(), value)为代码的结束。你可以使上面的代码自动化,如下所示:

上面的解决方案并不完全,因为它还不能处理字符串。

下面的代码将会产生一个错误。

上面的错误是因为is_less( "test")将会调用std::bind2nd( std::less< const char *>(), "test")。函数std::less< const char *>()并不知道如何比较std::strings(并没有从std::string到const char *的隐含转化)。因此,当我们调用代用参数‘const char *’的is_less函数时,我们应该内在std::bind2nd( std::less< std::string>(), . . .)。为了做到这一点,我们将用到一个帮助(helper)类。

如果你在代码中遇到了同样的问题,你只需要特殊化type_to_camparison_type类——就像我们对‘char *’和‘wchar *’所作的那样——即可。


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