Пропуск дефолтовых параметров в шаблонах и функциях

dreverser
dreverser

Хочется иметь возможность не перечислять параметры шаблона контейнера что бы добраться до нужного.

В моем случае пример с аллокатором в unordered_map. К которому что бы добраться приходится пройтись по двум дефолтовым параметрам hash и equal, накладно.

Так почему бы не дать возможность пропускать их  ?

вместо
typedef std::unordered_map<int, EVO, std::hash, std::equal_to, 
Alloc_wrapped<std::pair<const int, EVO> >

просто
typedef std::unordered_map<int, EVO,,, 
Alloc_wrapped<std::pair<const int, EVO> >

-5
рейтинг
4 комментария
Artalus

Пропускать "неинтересные" параметры - хочется, но мне более удобным кажется вариант с

typedef std::unordered_map<int, EVO, Allocator = Alloc_wrapped<...> >

Artalus
dreverser

А если абстрактный шаблон имеет два одинаковых типа ? тогда отличить к чему резолвить указанный тип невозможно

Я искал любой способ добраться до указания нужного мне аргумента.

Если уже все значения аргументов определены в декларации. То почему бы просто их не пропускать.

Возможно можно придумать некоторый квалификатор который бы коротким.

И указывал компилятору использовать значение по умолчанию если такое существует, лиюбо выдавал ошибку.

dreverser
stepsoft

Всегда можно упростить запись, например так

template < typename _Key, typename _Value, typename _Alloc >
using my_map = std::unordered_map< _Key, _Value, std::hash< _Key >, std::equal_to< _Key >, _Alloc >;

my_map<const int, EVO, Alloc_wrapped<std::pair< const int, EVO > > value;

И использовать сокращеный вариант шаблона. А лишние запятые приведут только к ошибкам и отсутствию наглядности.

stepsoft
dreverser

Да я в курсе про алиясинг, он может спасти только в одном случае, если этот шаблон алиясинга мы применяем очень много раз

На практике у меня такое редко встречается. Каждый контейнер уникальный

Я все же считаю что С++ должен эволюционировать в сторону уменьшения избыточности а не наоборот.

Как альтернатива я уже предложил придумать какой то кейворд для стандарта, который бы означал использовать значение по умолчанию

dreverser
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения