首页 > 解决方案 > 我可以使用 std::less 来比较两个 char 数组吗?

问题描述

我有这个函数compare,它是一个实例化的函数模板,用于比较两个不同大小的字符数组:

template <unsigned N, typename M>
bool compare(char const (&a)[N], char const (&b)[M]){
    //    return strcmp(a, b); // Ok
    return std::less<char const(&)[N]>(a, b); // error here.
}

标签: c++

解决方案


从根本上说,您试图将两个值与两种不同类型进行比较:char const (&a)[N]vs char const (&a)[M]。但是 std::less 只能比较具有相同类型的两个值。所以要让它工作:

#include <iostream>
template <unsigned N>
bool compare(char const (&a)[N], char const (&b)[N]){
    return std::less<char const[N]>()(a, b);
}

int main() {
  char const a[2] = {'a', 'a'};
  char const b[2] = {'a', 'a'};
  compare<2>(a, b);
}

另外,您必须解决一个小问题:您需要使用

std::less<char const[N]>()(a, b)

代替

std::less<char const[N]>(a, b)

std::less<char const[N]>()用于创建 std::less 实例,然后operator()在该实例上调用。


推荐阅读