У меня есть подкласс 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;
woudl делает то же самое, что и
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, он должен иметь «унаследованные» аргументы по умолчанию и , позволяющие их переопределять.Следующий шаг - это возможно?
Я видел предложение по поиску часто задаваемых вопросов по шаблону. Похоже, это очень распространенный вопрос; ^>