gpt4 book ai didi

c++ - 我如何为多种键类型专门化标准映射?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:01:12 26 4
gpt4 key购买 nike

我有一个 std::map 的子类

template<class ValueT>
FancyKeyMap
: public std::map<FancyKey,ValueT, FancyKey::Less>
{
...
public:
inline iterator find(FancyKeyArg key)
{
return(std::map<FancyKey,ValueT,
FancyKey::Less>::find(FancyKeyArg.makeKeyRef()));
}
};

这工作正常,(不要问我为什么不想使用一些隐式转换,这会导致太多不明确的重载,而且在这种情况下完全转换很昂贵:)

无论如何,如果上面的内容可以是 std::map 的特化,那将会很好

std::map<FancyKey,ValueT> fancymap;

会做同样的事情

FancyKeyMap<ValueT> fancyMap;

可以做这种类型的特化吗?


好的,只是尝试了部分特化:

namespace std {

template<class ValT, class CompareT=FancyKey::Less,
class AllocT=allocator<pair<const FancyKey,ValT> > >
class map<FancyKey, ValT, CompareT, AllocT>
{
....
};

}

我收到这个错误:

“部分特化不允许使用默认参数”

但要让它像 std::map 一样工作,它需要有“继承的”默认参数 允许它们被覆盖。下一步是可能的吗?

我确实看到了关于具有可搜索模板常见问题解答的建议,这似乎是一个非常常见的问题;^>

最佳答案

避免键入 makeKeyRef()(在 find 调用中)并同时更明确地说明意图似乎很麻烦。您是否考虑过只进行额外的输入并向 future 的维护者明确说明您的意图?

此外,由于标准容器没有虚拟析构函数,除非您非公开继承,否则当某个容器被基类指针销毁时,您将面临未定义的行为。

关于c++ - 我如何为多种键类型专门化标准映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6529077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com