2015-10-08 1 views
0

Помещение: Я ленив. И мне не нравятся длинные очереди.По умолчанию для параметров по умолчанию

Предположим, что у вас есть функция, которая принимает один параметр, и вы хотите указать значение по умолчанию для этого параметра. Предположим, что параметр - это std::map, а по умолчанию это просто пустая карта. Способ сделать это было бы

void foo (std::map<Key,Value> the_map = std::map<Key,Value>()); 

Теперь, если имя Key и/или Value долго (возможно, шаблонный), объявление функции удлиняется. Было бы неплохо иметь возможность написать что-то вроде

void foo (std::map<Key,Value> the_map = auto); 

Теперь я знаю, что это не использование ключевого слова auto, но это было только объяснить понятие: Я не хочу, чтобы удвоить длину уже длинного объявления функции только из-за необходимости записать простой по умолчанию элемент по умолчанию. Я просто хочу сказать компилятору «посмотри, создай по умолчанию там». Есть ли способ сделать это? Кроме того, кто-то тоже чувствует эту потребность?

Примечание: да, я мог бы набрать тип карты и использовать краткое имя. Но я хотел бы по-другому. Примечание 2: Да, я мог бы также перегрузить функцию, так что одна версия не принимает аргументов, а другая -. Но я хотел бы по-другому.

Я думаю, что я ищу это «параметр по умолчанию по умолчанию» ...

ответ

7

Вы можете использовать {} как инициализатора-п, который оценит инициализировать параметр.

void foo(std::map<K, V> the_map = {}); 
+0

Я думаю, что OP помещает карту там, как только в качестве примера тот факт, что карта, в частности, имеет это решение не делает этот ответ вообще – Slava

+0

@Slava Можете ли вы привести пример, когда это не будет работать? – Brian

+0

hmm Кажется, я ошибся, он работает для любого класса с по умолчанию ctor. Я добавлю +1 ваш ответ, когда блокировка исчезнет (это глупо, я не могу изменить свой голос, если ответ не изменился) – Slava