Сообщение Re: Шаблоны в с++ от 19.07.2022 20:01
Изменено 19.07.2022 20:03 rg45
Re: Шаблоны в с++
Здравствуйте, vasvladal, Вы писали:
V>Здравствуйте! На гитхабе увидел такой шаблон.
V>
V>Кто-нибудь может объяснить смысл ... в нем?
V>(ISO C++17 Standard (/std:c++17))
V>Спасибо
Это шаблонный класс, предназначенный для хранения символов-разделителей — констант времени компиляции. В этом классе определен функциональный оператор, который используется для проверки, является ли тот или иной символ разделителем. Дополнительно в классе заданы ограничения на количество и состав символов — не меньше одного символа, и разделителем не может быть двойная кавычка и символы конца строки. Для всех проверок используются специальные выражения: fold expressions, которые позволяют без циклов выполнить перебор всех констант, входящих в состав списка шаблонных параметров переменного размера — parameter packs
V>Здравствуйте! На гитхабе увидел такой шаблон.
V>
V>template<char_t... delimiters>
V> struct Delimiter
V> {
V> static_assert(sizeof...(delimiters) >= 1, "at least one delimiter required");
V> static_assert(((delimiters != '"') && ...), "the reserved character \" may not be a delimitor");
V> static_assert(((delimiters != '\r') && ...), "newlines may not be a delimitor");
V> static_assert(((delimiters != '\n') && ...), "newlines may not be a delimitor");
V> constexpr bool operator()(char_t candidate) const noexcept
V> {
V> return ((candidate == delimiters) || ...);
V> }
V> };
V>
V>Кто-нибудь может объяснить смысл ... в нем?
V>(ISO C++17 Standard (/std:c++17))
V>Спасибо
Это шаблонный класс, предназначенный для хранения символов-разделителей — констант времени компиляции. В этом классе определен функциональный оператор, который используется для проверки, является ли тот или иной символ разделителем. Дополнительно в классе заданы ограничения на количество и состав символов — не меньше одного символа, и разделителем не может быть двойная кавычка и символы конца строки. Для всех проверок используются специальные выражения: fold expressions, которые позволяют без циклов выполнить перебор всех констант, входящих в состав списка шаблонных параметров переменного размера — parameter packs
Re: Шаблоны в с++
Здравствуйте, vasvladal, Вы писали:
V>Здравствуйте! На гитхабе увидел такой шаблон.
V>
V>Кто-нибудь может объяснить смысл ... в нем?
V>(ISO C++17 Standard (/std:c++17))
V>Спасибо
Это шаблонный класс, предназначенный для хранения символов-разделителей — констант времени компиляции. В этом классе определен функциональный оператор, который используется для проверки, является ли тот или иной символ разделителем. Дополнительно в классе заданы ограничения на количество и состав символов — не меньше одного символа, и разделителем не может быть двойная кавычка и символы конца строки. Для всех проверок используются специальные выражения: fold expressions, которые позволяют без циклов, в рамках одного арифметического или булевого выражения, выполнить перебор всех констант, входящих в состав списка шаблонных параметров переменного размера — parameter packs
V>Здравствуйте! На гитхабе увидел такой шаблон.
V>
V>template<char_t... delimiters>
V> struct Delimiter
V> {
V> static_assert(sizeof...(delimiters) >= 1, "at least one delimiter required");
V> static_assert(((delimiters != '"') && ...), "the reserved character \" may not be a delimitor");
V> static_assert(((delimiters != '\r') && ...), "newlines may not be a delimitor");
V> static_assert(((delimiters != '\n') && ...), "newlines may not be a delimitor");
V> constexpr bool operator()(char_t candidate) const noexcept
V> {
V> return ((candidate == delimiters) || ...);
V> }
V> };
V>
V>Кто-нибудь может объяснить смысл ... в нем?
V>(ISO C++17 Standard (/std:c++17))
V>Спасибо
Это шаблонный класс, предназначенный для хранения символов-разделителей — констант времени компиляции. В этом классе определен функциональный оператор, который используется для проверки, является ли тот или иной символ разделителем. Дополнительно в классе заданы ограничения на количество и состав символов — не меньше одного символа, и разделителем не может быть двойная кавычка и символы конца строки. Для всех проверок используются специальные выражения: fold expressions, которые позволяют без циклов, в рамках одного арифметического или булевого выражения, выполнить перебор всех констант, входящих в состав списка шаблонных параметров переменного размера — parameter packs