当处理通用编程时,开发者往往有需要使用一元判断来检测某个范围内的所有元素是否小于、小于或者等于、大于……某个任意值。
你可以这样写代码:
上面的代码显得很罗嗦。你总是需要以
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 *’所作的那样——即可。