我搜索了std :: map运行时排序的实现,并找到了这个解决方案: STL std :: map动态排序
对我来说很明显,但我不明白,如何在std :: map的构造函数中使用OrderingType.std :: map有一个构造函数,它将一个比较器对象作为参数.从我的观点来看,使用这样的代码是正常的:
int main()
{
Ordering<int> test_ordering( ASCENDING );
CUSTOMMAP map1( test_ordering );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是上面提到的主题的代码也编译:
int main()
{
CUSTOMMAP map1( ASCENDING );
//...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么它工作:std :: map的构造函数不能获取OrderingType枚举的参数而不是Ordering类对象本身.
如果上面的构造函数Ordering<int>未将您的枚举声明为explicit,那么它被认为是一个"转换构造函数",当编译器需要从枚举类型转换为类型时,它可以自动插入Ordering<int>.所以编译器实际上是这样做的:
CUSTOMMAP map1( ASCENDING );
Run Code Online (Sandbox Code Playgroud)
并将其转化为:
CUSTOMMAP map1( Ordering<int>(ASCENDING) );
Run Code Online (Sandbox Code Playgroud)
这称为隐式转换.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |