Всегда думал, что вариабельные шаблонные параметры нужны для передачи нескольких параметров (как в том же emplace), но недавно увидел пример их использования в семантике "один опциональный параметр". Почему-то такое использование сходу оказалось неочевидным, но очень крутым.
На 36:32 вы просили подумать над проблемой последнего пробела в функции print_all для переменного числа параметров. Поскольку в комментариях никто не отписался по этому поводу, то тогда я напишу. Самый тупой вариант решения такой: разбить пачку аргументов на первый и остальные. Тогда первый аргумент просто выводится в cout без обертки, а остальные выводятся в cout в обертке, которая добавляет пробел перед ними. Но у этого способа есть проблема: в исходную функцию можно вообще не передавать аргументы, а в этой должен быть хотя бы один аргумент (первый, который я указал явно), иначе будет ошибка компиляции. Чтобы это обойти, я перегрузил функцию print_all для пустого списка аргумент. Именно поэтому это тупой вариант решения, на мой взгляд. То есть в итоге код будет такой: template class AddLeadSep { public: AddLeadSep(const T& ref_p, const char sep_p) : ref(ref_p), sep(sep_p) { } friend std::ostream& operator
Много времени прошло, но вы просили подумать над проблемой последнего пробела тех кто смотрит на ютубе... можно перегрузить friend std::ostream& operator
Касательно emplace: 1. До 2011 года не было unique_ptr, так что auto_ptr было нашим всем. 2. Всё-таки heap inderection к branch predictor unit не относится --- это не переход. Оно относится к hardware prefetch unit.
Насчёт auto_ptr, им в 2000-х пользоваться считалось крайне дурным тоном, см. книги Майерса например. По поводу (2) -- можно таймлайн когда это было? Я может быть внесу фикс в еррату.
@@tilir это всё было начиная примерно с 45:36. А про auto_ptr, понятно, что это дурной тон, но других вариантов-то не было в стандарте. unique_ptr только в новом стандарте появился (-:
Всегда думал, что вариабельные шаблонные параметры нужны для передачи нескольких параметров (как в том же emplace), но недавно увидел пример их использования в семантике "один опциональный параметр". Почему-то такое использование сходу оказалось неочевидным, но очень крутым.
На 36:32 вы просили подумать над проблемой последнего пробела в функции print_all для переменного числа параметров. Поскольку в комментариях никто не отписался по этому поводу, то тогда я напишу. Самый тупой вариант решения такой: разбить пачку аргументов на первый и остальные. Тогда первый аргумент просто выводится в cout без обертки, а остальные выводятся в cout в обертке, которая добавляет пробел перед ними. Но у этого способа есть проблема: в исходную функцию можно вообще не передавать аргументы, а в этой должен быть хотя бы один аргумент (первый, который я указал явно), иначе будет ошибка компиляции. Чтобы это обойти, я перегрузил функцию print_all для пустого списка аргумент. Именно поэтому это тупой вариант решения, на мой взгляд. То есть в итоге код будет такой:
template
class AddLeadSep {
public:
AddLeadSep(const T& ref_p, const char sep_p) : ref(ref_p), sep(sep_p) {
}
friend std::ostream& operator
к 20 слайду
template
Node *tree_get(Node *top, Args... args) {
return (top ->* ... ->* args);
}
Node t;
auto left = &Node::left;
auto right = &Node::right;
Много времени прошло, но вы просили подумать над проблемой последнего пробела тех кто смотрит на ютубе...
можно перегрузить friend std::ostream& operator
36:21. Для оператора
Вот такую грязь придумал к 36:32.
template
void print_all(Args... args) {
int s = 0;
(std::cout
Касательно emplace:
1. До 2011 года не было unique_ptr, так что auto_ptr было нашим всем.
2. Всё-таки heap inderection к branch predictor unit не относится --- это не переход. Оно относится к hardware prefetch unit.
Насчёт auto_ptr, им в 2000-х пользоваться считалось крайне дурным тоном, см. книги Майерса например.
По поводу (2) -- можно таймлайн когда это было? Я может быть внесу фикс в еррату.
@@tilir это всё было начиная примерно с 45:36. А про auto_ptr, понятно, что это дурной тон, но других вариантов-то не было в стандарте. unique_ptr только в новом стандарте появился (-:
Для 19-го слайда у меня получилось:
template void print_all(T... args) {
auto sz = sizeof...(args);
(std::cout
к 19 слайду
template void print_bad(Args&&... args) {
((std::cout
На 19 слайде перегружаемый оператор должен быть friend?
Да, спасибо, опечатка
@@tilir Вам спасибо за Вашу работу.