Size: a a a

2020 August 04

VD

Vlad Doc in supapro.cxx
Chuvi
И, кстати, как сделать функцию, принимающую любой пригодный контейнер? То есть, чтобы можно было скормить vector, list, array, и так далее? (Пока писал, кажется понял, что надо посмотреть как это сделано в OpenCV)
Бегин енд
источник

ПК

Побитый Кирпич... in supapro.cxx
Chuvi
И, кстати, как сделать функцию, принимающую любой пригодный контейнер? То есть, чтобы можно было скормить vector, list, array, и так далее? (Пока писал, кажется понял, что надо посмотреть как это сделано в OpenCV)
template <typename Container>
void foo(const Container& container);
источник

ПК

Побитый Кирпич... in supapro.cxx
Но скорее всего тебе не контейнер нужен а рэндж
источник

ПК

Побитый Кирпич... in supapro.cxx
Тогда просто Container замени на Range
источник

C

Chuvi in supapro.cxx
Побитый Кирпич
Тогда просто Container замени на Range
А разница в чём? И почему мне вдруг может понадобиться Range?
источник

ПК

Побитый Кирпич... in supapro.cxx
Chuvi
А разница в чём? И почему мне вдруг может понадобиться Range?
У Range меньше интерфейс, т.е. больше типов подходит
источник

ПК

Побитый Кирпич... in supapro.cxx
Например для итерации достаточно рэнжа
источник

ПК

Побитый Кирпич... in supapro.cxx
Если тебе надо вызывать методы типа .empty(), size() и т.д., то тут уже Container нужен
источник

ПК

Побитый Кирпич... in supapro.cxx
Но они редко нужны
источник

ПК

Побитый Кирпич... in supapro.cxx
Обычно через рэнж можно выразить алгоритмы
источник

C

Chuvi in supapro.cxx
Побитый Кирпич
template <typename Container>
void foo(const Container& container);
Я чёт ща не понимаю.  чем будет отличаться  ```
template <typename Container>
void foo(const Container& container);
от, например,
template <typename ZZZZ_type>
void foo(const ZZZZ_type& container);
``` ?
источник

ПК

Побитый Кирпич... in supapro.cxx
Chuvi
Я чёт ща не понимаю.  чем будет отличаться  ```
template <typename Container>
void foo(const Container& container);
от, например,
template <typename ZZZZ_type>
void foo(const ZZZZ_type& container);
``` ?
С точки зрения компилятора ничем
источник

ПК

Побитый Кирпич... in supapro.cxx
until C++20
источник

ПК

Побитый Кирпич... in supapro.cxx
Потом появятся концепты
источник

DB

Dimmu Borgir in supapro.cxx
👺
но хотя бы до уровня когда уже можешь спокойно написать какую-то простенькую 2-д игру
Когда до одномерных массивов дойдешь
источник

ПК

Побитый Кирпич... in supapro.cxx
Которые ты и будешь  тут юзать, до С++20 делаешь Named requirements + невный интерфейс шаблонной функции
источник

Е

Егор in supapro.cxx
Chuvi
Я чёт ща не понимаю.  чем будет отличаться  ```
template <typename Container>
void foo(const Container& container);
от, например,
template <typename ZZZZ_type>
void foo(const ZZZZ_type& container);
``` ?
можно сфинае обмазаться или ассерт поставить
источник

ПК

Побитый Кирпич... in supapro.cxx
Chuvi
Я чёт ща не понимаю.  чем будет отличаться  ```
template <typename Container>
void foo(const Container& container);
от, например,
template <typename ZZZZ_type>
void foo(const ZZZZ_type& container);
``` ?
Вообщем, до С++20 идея в том, что название шаблонного параметра должно совпадать с Named Requirements, чтоб понятен неявный интерфейс шаблона был
источник

C

Chuvi in supapro.cxx
Побитый Кирпич
С точки зрения компилятора ничем
В таком случае  - для чего менять  ```
template <typename Container>
void foo(const Container& container);
 на 
template <typename Range>
void foo(const Range& container);
```

или я тебя не так понял?
источник

ПК

Побитый Кирпич... in supapro.cxx
Chuvi
В таком случае  - для чего менять  ```
template <typename Container>
void foo(const Container& container);
 на 
template <typename Range>
void foo(const Range& container);
```

или я тебя не так понял?
Потому что первый работает с контейнером, а второй с любым рэнжом
источник