Кресты / Говнокод #20848 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>, GenericString<Char, Allocator>> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>&, GenericString<Char, Allocator>> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>&&, GenericString<Char, Allocator>> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<const GenericStringView<Char>&, GenericString<Char, Allocator>> {typedef GenericString<Char, Allocator> _;};

template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>, GenericString<Char, Allocator>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>&, GenericString<Char, Allocator>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>&&, GenericString<Char, Allocator>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<const GenericStringView<Char>&, GenericString<Char, Allocator>&> {typedef GenericString<Char, Allocator> _;};

template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>, GenericString<Char, Allocator>&&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>&, GenericString<Char, Allocator>&&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>&&, GenericString<Char, Allocator>&&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<const GenericStringView<Char>&, GenericString<Char, Allocator>&&> {typedef GenericString<Char, Allocator> _;};

template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>, const GenericString<Char, Allocator>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>&, const GenericString<Char, Allocator>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericStringView<Char>&&, const GenericString<Char, Allocator>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<const GenericStringView<Char>&, const GenericString<Char, Allocator>&> {typedef GenericString<Char, Allocator> _;};



template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>, GenericStringView<Char>> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>, GenericStringView<Char>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>, GenericStringView<Char>&&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>, const GenericStringView<Char>&> {typedef GenericString<Char, Allocator> _;};

template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>&, GenericStringView<Char>> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>&, GenericStringView<Char>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>&, GenericStringView<Char>&&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>&, const GenericStringView<Char>&> {typedef GenericString<Char, Allocator> _;};

template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>&&, GenericStringView<Char>> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>&&, GenericStringView<Char>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>&&, GenericStringView<Char>&&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<GenericString<Char, Allocator>&&, const GenericStringView<Char>&> {typedef GenericString<Char, Allocator> _;};

template<typename Char, typename Allocator> struct CommonTypeRef<const GenericString<Char, Allocator>&, GenericStringView<Char>> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<const GenericString<Char, Allocator>&, GenericStringView<Char>&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<const GenericString<Char, Allocator>&, GenericStringView<Char>&&> {typedef GenericString<Char, Allocator> _;};
template<typename Char, typename Allocator> struct CommonTypeRef<const GenericString<Char, Allocator>&, const GenericStringView<Char>&> {typedef GenericString<Char, Allocator> _;};

Кто-нибудь знает, как сократить этот комбинаторный взрыв частичных специализаций без макросов?

Запостил: gammaker gammaker, (Updated )

Комментарии (21) RSS

  • внутри GenericString и GenericStringView определены тайпдефы для Char/Allocator?
    Ответить
    • Короче. Вот такая вот лабутэнь может сработать (а может и нет, лень тестить) в зависимости от общей специализации CommonTypeRef:
      template  <
          typename Char,
          typename Allocator,
          typename String,
          typename View,
          typename = std_enable_if_t<
              std::is_same<std::decay_t<String>, GenericString<Char,Allocator>>::value
              && std::is_same<std::decay_t<StringView>,GenericStringView<Char>>::value
          >
      >
      struct CommonTypeRef { typedef GenericString<Char, Allocator> _; };
      Ответить
      • Проблема в том, что у меня в посте только частичные специализации. А вообще это универсальный variadic шаблон, который определён через тернарный оператор и который ничего не знает про строки. А вот это вот всё нужно было, чтобы доопределить его для работы со строками, потому что тернарный оператор в этом случае выдаст ошибку.
        Ответить
  • template<class T1, class T2>
    struct CommonTypeRef {
        typedef Govno<std::decay_t<T1>, std::decay_t<T2>>::type _;
    };
    
    template<class Char, class Allocator>
    struct Govno<GenericString<Char, Allocator>, GenericStringView<Char>> {
        typedef GenericString<Char, Allocator> type;
    };


    Тебе ведь это надо?
    Ответить
    • нет. decay надо вызывать над строкой/вьюшкой, а не над чаром/аллокатором
      Ответить
      • Строка и вьюшка - параметры CommonTypeRef, над ними и вызывается.
        Ответить
          • Тебе там спермой глаза забрызгало?
            > decay надо вызывать над строкой/вьюшкой, а не над чаром/аллокатором
            > decay надо вызывать над строкой/вьюшкой
            > Строка и вьюшка - параметры CommonTypeRef, над ними и вызывается
            > над ними и вызывается
            Над ними и вызывается. Над строкой и вьюшкой.
            Ответить
  • Как сократить...
    mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
    mmmmmmmmmmmmmmmmmmmmmmdhyso+ommmmmmmdhysymmmmmmdyhmmmmmmmmmmmmmm
    mmmmmmmmmmmmmmmmmmmmho///++oymmmmmyo+o//ohmmmho//:+dmmmmmmmmmmmm
    mmmmmmmmmmmmmmmmmmmyo++//+sdmmmdo/://++sdmmho+++//ommmmmmmmmmmmm
    mmmmmmmmmmmmmmmmmmhsosooydmmmho+::::/ohmmh+/+o++osdmmmmmmmmmmmmm
    mmmmmmmmmmmmmmmmmmmdhhdmmmmddyoo///ohmmho::::/+oymmmmmmmmmmmmmmm
    mmmmmmmmmmmmmddmmmmmmmmmmmmmdysyyohmmds+/////+sdmmmmmmmmdydmmmmm
    mmmmmmmmmmmmy+/+oymmmmmmmmmmmmmmmmmmdyssyoosydmmmmmmdhs/::/dmmmm
    mmmmmmmmmds///+++oymmmyooydmmmmmmmmmmdhsyhyhmmmmmmhsooo///ommmmm
    mmmmmmmdo::::::///+o+++++soymmmmmmmmmmmmdmmmmmmds///+++oosdmmmmm
    mmmmmms/:::::/::::/+++///:/yhs+/sohmmmmmmmmmmhyoo+/:/++shmmmmmmm
    mmmmd+/:::::::::://///:////::::ooo:hmmmmmmmmhyss+o///shmmmmmmmmm
    mmmy/::::::::::::::///::::::::://++ymmmmmmmmdhssyo+sdmmmmmmmmmmm
    md+:::::::::::::::///:::::::::/++odmmdhdmmmmmmdddhmmmmmmmmmmmmmm
    /:::::::::::::::::::::::::::::///shyoo+oymmmmmmmmmmmmmmmmmmmmmmm
    --::::::::/:::::::://::::::::::///////++ohmmmmmmmmmmmmmmmmmmmmmm
    :::::::::::::::::::::::::::::::::::::/+/symmmmmmmmmmmmmmmmmmmmmm
    ::://:::::::::::::::::::::::::::::::///ydmmmmmmmmmmmmmmmmmmmmmmm
    :://///////::::::::::::-:-::::::::///sdmmmmmmmmmmmmmmmmmmmmmmmmm
    ::::////:::::::::::::::::::::::::/oydmmmmmmmmmmmmmmmmmmmmmmmmmmm
    :::::///:::::::::::::::::::::::::smmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
    ::::::::::::::::::::::::::::::::+mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
    //:::::::::::::::::::::::::::::+dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
    /////:/::::::/:::::/:::::::::/++hmmmmmmmmmddhyyyhhdmmmmmmmmmmmmm
    /////////::/:::://////::::////://+ooooo++///:::::///ohmmmmmmmmmm
    ////////+++++++++///////////::-::::::::::::::::::/:---smmmmmmmmm
    ++oooooooooooosoooooo++//////::::::::::::///////////+sdmmmmmmmmm
    dddmmmmmdhysssooooooooooooo+++///////+//++++++syhddmmmmmmmmmmmmm
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8