Ric*_*all 4 c++ polymorphism stl set
为什么这个代码
struct ThingComparator
{
...
}
static void Blah (set <CString> &things)
{
...
}
...
set<CString, ThingComparator>things;
Blah (things);
Run Code Online (Sandbox Code Playgroud)
无法编译时出现以下错误(Visual Studio 2010):
error C2664: 'Blah' : cannot convert parameter 1 from 'std::set<_Kty,_Pr>' to 'std::set<_Kty> &'
Run Code Online (Sandbox Code Playgroud)
我的C++知识显然是有限的,但我希望听到一个小号宣布他的可靠骏马上的多态骑士,但我所能听到的只是一个马屁和一个悲伤的长号:-(
std::set声明如下:
template<
class Key,
class Compare = std::less<Key>,
class Allocator = std::allocator<Key>
> class set;
Run Code Online (Sandbox Code Playgroud)
因此,std::set<CString>真的意味着std::set<CString, std::less<CString>, std::allocator<CString>>,而std::less<CString>不是ThingComparator.写下以下内容:
struct ThingComparator {
...
};
template<typename Comparator>
static void Blah(std::set<CString, Comparator>& things) {
...
}
...
std::set<CString, ThingComparator> things;
Blah(things);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |