在c++中正确地模板化字符串比较器
templating a string comparator correctly in c++
我在c++中为字符串编写了一个比较器
template <class T> class AStringComparator // primary template declaration
{
public:
bool operator()( T, T );
};
template <> class AStringComparator<std::basic_string<char> >
{
public:
bool operator()( std::basic_string<char> _A, std::basic_string<char> _B )
{
//all the code here
}
}
然后,我尝试将其模板化为const char*
,如下所示:
template <> class AStringComparator<char const *>
{
public:
bool operator()( char const * _A, char const * _B )
{
AStringComparator<std::basic_string<char> > S;
std::basic_string<char> a(_A);
std::basic_string<char> b(_B);
S( a, b );
}
};
这编译并运行,但几乎总是产生错误的结果。我想我在实现const char*
版本时犯了一个错误。你能指出它吗。我的意图是将const char*
的转换为basic_string,然后让我编写的并且正常工作的basic_string的原始函数来完成这项工作。但是出了严重的问题。
您的专业化缺少一个返回语句:
bool operator()( char const * _A, char const * _B )
{
AStringComparator<std::basic_string<char> > S;
std::basic_string<char> a(_A);
std::basic_string<char> b(_B);
S( a, b ); // <----------------- should be return S(a,b);
}
这是未定义的行为。在实践中,它会导致呼叫站点出现随机的真/假,这就是为什么它似乎"几乎总是错误的"。
相关文章:
- std::设置自定义比较器
- C++中"std::sort"比较器的不同类型
- 将 std::set 与基于键的比较器一起使用
- 带自定义比较器的最小优先级队列
- 函数类作为比较器
- 优先级队列自定义比较器
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- 字符串比较中的意外输出
- set_intersection使用自定义设置比较器
- 如何执行不区分大小写的字符串比较?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 如何为集合 c++ 建立比较器
- <<运算符优先级与字符串比较
- C++复杂情况的比较器通过参数问题
- 在c++中正确地模板化字符串比较器
- 带有自定义字符串比较器的字符串的priority_queue的C++向量
- 使用通用比较器的字符串比较
- 如何编写用于set_symmetric_difference[C++]的字符串比较器