Я новичок в использовании списков инициализаторов, и мне интересно, если они работают аналогично другим контейнерам 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 лучшей альтернативой?
Спасибо!
Когда я пытаюсь это сделать, я получаю эти ошибки. Тем не менее, когда я избавляюсь от твоего бессмысленного использования ссылок, все работает
std::initializer_list
магазины ценности, не ссылки. Вы должны принимать const std::initializer_list<T> &
не const std::initializer_list<T&> &
,
Все, что я пытаюсь сделать, это написать функцию, которая принимает любое количество аргументов по ссылке и возвращает ссылку на самый большой из них.
[…] Это возможно с initializer_lists?
Нет. std::initializer_list
для ценности, не ссылки. Но я не вижу причин, по которым вы не могли бы брать предметы по стоимости, а не по ссылке. Или, более конкретно, почему бы вам просто не использовать std::min
, который может взять список инициализатора?
Других решений пока нет …