станд :: initializer_list & л; & GT; и эталонный параметр

Я новичок в использовании списков инициализаторов, и мне интересно, если они работают аналогично другим контейнерам stl. Под этим я подразумеваю, что они копируют значения? Я пытаюсь сделать простую функцию min (), например:

template <class T> T& minArgs(const std::initializer_list<T&>& Arguments)
{
const T* Smallest = Arguments.begin();
for (const T* I = begin(Arguments); I != end(Arguments); ++I)
{
if (*I < *Smallest) Smallest = I;
}
return *Smallest;
}

Однако, когда я вызываю функцию, я получаю это от GCC:

error: 'const' qualifiers cannot be applied to 'int&'

Я играл с этим, и кажется, что initializer_lists может не делать то, что я хочу; Я хочу, чтобы функция кроме аргументов не POD также. Будет ли va_list лучшей альтернативой?

Спасибо!

3

Решение

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

std::initializer_list магазины ценности, не ссылки. Вы должны принимать const std::initializer_list<T> &не const std::initializer_list<T&> &,

Все, что я пытаюсь сделать, это написать функцию, которая принимает любое количество аргументов по ссылке и возвращает ссылку на самый большой из них.
[…] Это возможно с initializer_lists?

Нет. std::initializer_list для ценности, не ссылки. Но я не вижу причин, по которым вы не могли бы брать предметы по стоимости, а не по ссылке. Или, более конкретно, почему бы вам просто не использовать std::min, который может взять список инициализатора?

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]