ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
1164796 Топик полностью
VladislavS. (15.01.2022 12:23 - 15:24, просмотров: 230) ответил Evgeny_CD на 20 Smaller yet Handy C++20 Features
А что все так синтаксис С++ ругают? Там всего несколько вещей надо знать: 

1. В < > пишут параметры шаблона. Всё просто, в ( ) пишем данные, а в < > их типы. Например, foo<int>(10); Функция вызвана с чилом 10, с которым велено работать как с int.


1.1 Чуть не забыл :) Константы и всё что вычисляется на этапе компиляции тоже можно в <> пихать.


2. С помощью :: получаем доступ к внутренностям пространства имён или статическим методам класса. Например, MyClass::foo<int>(10); Это вообще просто.


3. Тремя точками ... обозначаем наборы параметров. MyClass<Args...>::foo<int>(10); Всё то же самое, но MyClass теперь это шаблон класса, определённый списком типов Args.


4. [](){}() - ну это простая лямбда. Функтор как функтор. Синтаксис как у обычной функции. Сложность только в том, что её обычно вставляют внутрь кода и не форматируют как положено форматировать функции, что действительно затрудняет чтение. MyClass<Args...>::foo<int>( [](auto x){return x;}(10) );


4.1 Как дополнение, в C++20 лямбда может быть шаблонной - []<template>(){}() . Ну, скобочками больше, скобочками меньше - нас этим уже не напугать. MyClass<Args...>::foo<int>([]<template... T>(auto x){ return MyNameSpace::foo<T...>(x); }(10));


Собственно и всё. C опытом приходит. Меня, например, в "понятном С" определение "массива указателей на функции принимающие хуё-моё и возвращающие чёрте-что" тоже в ступор вгоняет. Доклад окончил, for(;;);