【发布时间】:2013-12-15 22:36:37
【问题描述】:
我用 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 的原始函数正常工作。但是有些事情发生了可怕的错误。
【问题讨论】:
-
只是一个抬头,下划线和后面的大写字母是保留标识符。
-
return S(a,b);现在你没有返回任何东西(你的编译器应该发出警告)。 -
@jrok OMG 很抱歉打扰到这样的人。谢谢你指出来顺便说一句。这里是凌晨 4 点。因此愚蠢。如果您不介意,请将其添加为答案。
-
@jrok COMpiler 没有发出任何警告..我没有打开严格或墙..无论如何,谢谢。
-
@Potatoswatter 它确实解决了问题。不过,我要修复所有变量名。
标签: c++ templates stl comparator