【发布时间】:2015-07-05 00:04:02
【问题描述】:
我必须创建一个通用函数来在 C++ 中对字符串进行排序,并且我必须使用我自己的字符串类(我已经实现为 SuchString)对其进行测试。
我有一个这样的模板:
template<typename T, class Sel>
void stringSort(T& lel);
Sel 类包含一个谓词函数来确定排序依据。
我想专门化排序功能,这样它就可以和我自己的SuchString类一起正常工作:
template<>
void stringSort<SuchString&>(SuchString& string);
当我这样做时,我得到了错误:
没有函数模板匹配函数模板特化'
stringSort'
对这样的函数进行专门化的正确方法是什么?我不能简单地重载该函数,因为我需要包含谓词函数的Sel 类。我不能将此函数作为简单的指针参数传递
到函数,因为任务是使用模板。
感谢任何帮助。
【问题讨论】:
-
不要使用函数特化。为此使用类专业化。并将调用分派给类的静态成员函数(模板和特化)。
-
我不明白你的最后一段 - 你为什么不能将函数作为函数指针传递?您可以将其作为模板参数 - 这就是
std::sort的工作原理。
标签: c++ function sorting templates predicate