Size: a a a

cxx.Дискуссионная

2021 July 25

NK

Nickolay Kononov in cxx.Дискуссионная
ну то есть если он изучал мув семантику по каким-то источникам он по идее должен знать
источник

O

Ofee in cxx.Дискуссионная
Переслано от Ofee
Первый сниппет берёт шаблонные параметры (если они есть), с которым инстанцирован Tag и вставляет после первого аргумента

template<typename Tag, typename... Args>                                              
struct insert_tag_after_first_arg {
   using type = type_list<Args...>;
};
                                                                                 
template<
   template<typename...> class Tag,
   typename... TagTypes,
   typename FirstArg,
   typename... Args>
struct insert_tag_after_first_arg<
   Tag<TagTypes...>,
   FirstArg, Args...>
{
   using type = type_list<FirstArg, TagTypes..., Args...>;
};                                                                      
                                                                                 
template<
   template<typename...> class Tag,
   typename... Args>                            
struct insert_tag_after_first_arg<
   Tag<Args...>>                                                
{                                                                                  
   using type = type_list<Args...>;                                
};

Довольно прямолинейный код, придётся задокументировать каждую из специализаций, ибо у нас нет какого-то общего случая



Второй делает ровно то же самое, но переиспользует собственные специализация, сводя всё к одной последней:

template<typename Tag, typename... Args>                                              
struct insert_tag_after_first_arg
       : insert_tag_after_first_arg<                              
             type_list<>, Args...                                                                
         > {};                                                                    
                                                                                 
template<
   template<typename...> class Tag,
   typename... TagTypes,
   typename FirstArg,
   typename... Args>
struct insert_tag_after_first_arg<
   Tag<TagTypes...>, FirstArg, Args...>                                      
       : insert_tag_after_first_arg<                                                      
           type_list<FirstArg, TagTypes..., Args...>                            
       > {};                                                                      
                                                                                 
template<
   template<typename...> class Tag,
   typename... Args>                            
struct insert_tag_after_first_arg<Tag<Args...>>                                                
{                                                                                  
   using type = type_list<Args...>;                                
};


Сложночитаемо, но, во-первых, художественно идейно красиво, а во вторых, у нас один type вместо трёх, что упрощает документирование — в документацию вообще не помещаем ни одну из специализаций, а описываем общий случай с единственным type, отнаследованным от одной специализации
источник

O

Ofee in cxx.Дискуссионная
Переслано от Ofee
Ваш стул
Анонимный опрос
11%
Прямолинейная реализация
50%
Рекурсивная реализация
39%
Ничего не понял
Проголосовало: 18
источник

O

Ofee in cxx.Дискуссионная
Переслано от Ofee
В общем, всё сводится к тому, хотим мы видеть несколько очевидных и понятных using type =, или хотим иметь только один тайп алиас, который документируется один раз
источник

NK

Nickolay Kononov in cxx.Дискуссионная
веб клиент тг такой охуенный
источник

D

Danya in cxx.Дискуссионная
Какой из трёх?
источник

NK

Nickolay Kononov in cxx.Дискуссионная
источник

D

Danya in cxx.Дискуссионная
Ну так это старый
источник

D

Danya in cxx.Дискуссионная
Попробуй webz или webk
источник

O

Ofee in cxx.Дискуссионная
Блин, ну, пробелы я не специально(
источник

NK

Nickolay Kononov in cxx.Дискуссионная
вообще разницы нет
источник

NK

Nickolay Kononov in cxx.Дискуссионная
такой же скрин
источник

NK

Nickolay Kononov in cxx.Дискуссионная
и все такое же
источник

D

Danya in cxx.Дискуссионная
Во всех трёх?
источник

NK

Nickolay Kononov in cxx.Дискуссионная
webz
источник

NK

Nickolay Kononov in cxx.Дискуссионная
webk не открыл
источник

А

Алексей in cxx.Дискуссионная
шо там за страшные кода кидаете?хоть бы ссылку кидали на чтото(в телеге анриал)
источник

D

Danya in cxx.Дискуссионная
Ты не открыл или интернет?)
источник

NK

Nickolay Kononov in cxx.Дискуссионная
403
источник

D

Danya in cxx.Дискуссионная
Хз, у меня всё ок
источник