1. C++ / Говнокод #19517

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    __fastcall OpenArray(T arg0, T arg1, T arg2, T arg3, T arg4, T arg5, T arg6,
    				 T arg7, T arg8, T arg9, T arg10, T arg11, T arg12,
    				 T arg13, T arg14, T arg15, T arg16, T arg17, T arg18)
    	  {
    		Array = new T[Count = 19];
    		Array[0] = arg0;
    		Array[1] = arg1;
    		Array[2] = arg2;
    		Array[3] = arg3;
    		Array[4] = arg4;
    		Array[5] = arg5;
    		Array[6] = arg6;
    		Array[7] = arg7;
    		Array[8] = arg8;
    		Array[9] = arg9;
    		Array[10] = arg10;
    		Array[11] = arg11;
    		Array[12] = arg12;
    		Array[13] = arg13;
    		Array[14] = arg14;
    		Array[15] = arg15;
    		Array[16] = arg16;
    		Array[17] = arg17;
    		Array[18] = arg18;
    	  }

    Старый недобрый C++ Builder. Выше по коду еще 17 таких же конструкторов.

    Запостил: Vindicar, 24 Февраля 2016

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

    • показать все, что скрытоfastcall, же
      Ответить
    • показать все, что скрытоДля c++98 - обычная практика.
      Ответить
      • Автогенеренный анролинг?
        Ответить
        • Скорее, имитация variadic functions.
          Ответить
        • показать все, что скрытоvariadic template
          Ответить
          • Вообще, это кааааакбы оправданно.
            Этот самый OpenArray чаще всего используется в паре с вариантным типом для аналога sprintf(), так что ему придется принимать параметры разных типов. Таким образом, обычный метод создания variadic functions тут не прокатит...
            Но все равно выглядит как говно.
            Ответить
            • показать все, что скрытоvariadic template != variadic function

              P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
              MyPrintf("%d %s\n", {42, "hui"});
              Ответить
              • std::initializer_list не получится. Это гомогенная коллекция. Разные типы не пихаются.
                Ответить
                • показать все, что скрыто> Разные типы не пихаются.
                  Ты не поверишь, но...

                  http://ideone.com/h6HW4I

                  У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                  Ответить
                  • Ну так то да. Но в функцию так разные типы, чтобы они остались разными не передать. Разве что как какой нибудь boost::any или boost::variant. any для printf-подобной функции перебор, но variant учитывая ограниченность возможных типов — вполне.
                    Ответить
                    • Ну так то да. Но в функцию так разные типы, чтобы они остались разными не передать. Разве что как какой нибудь boost::any или boost::variant. any для printf-подобной функции перебор, но variant учитывая ограниченность возможных типов — вполне.
                      Ответить
                  • variadic template != variadic function<br />
                    <br />
                    P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...<pre><code class="">MyPrintf(&quot;%d %s\n&quot;, {42, &quot;hui&quot;});</code></pre>
                    Ответить
                    • variadic template != variadic functionbr /
                      br /
                      P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...precode class=MyPrintf(&amp;quot;%d %s\n&amp;quot;, {42, &amp;quot;hui&amp;quot;});/code/pre
                      Ответить
                  • Разные типы не пихаются.
                    Ты не поверишь, но...

                    http://ideone.com/h6HW4I

                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_listT с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                  • > Разные типы не пихаются.<br />
                    Ты не поверишь, но...<br />
                    <br />
                    http://ideone.com/h6HW4I<br />
                    <br />
                    У этих списков, емнип, вообще никакого типа нету пока они не попадут в std::initializer_list<T> с нужным тебе T.
                    Ответить
                • std::initializer_list не получится. Это гомогенная коллекция. Разные типы не пихаются.
                  Ответить
              • Автогенеренный анролинг?
                Ответить
              • variadic template != variadic function

                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf(%d %s\n, {42, hui});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
              • variadic template != variadic function<br />
                <br />
                P.S. Ну а вообще - в нынешних крестах вместо этого сраного OpenArray можно std::initializer_list заюзать...
                MyPrintf("%d %s\n", {42, "hui"});
                Ответить
            • показать все, что скрытоВ очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):
              template <typename... Args>
              OpenArray(Args... args) :
                  Count(sizeof...(args)),
                  Array(new T[sizeof...(args)] {T(args)...})
              {
              }
              Ответить
              • Минутку, и как этим можно будет пользоваться?
                И да, variadic templates вроде относительно новая штука?
                (Новая относительно говна мамонта из OP, я имею ввиду.)
                Ответить
                • показать все, что скрытоДа абсолютно так же, как и конструктором из топика.

                  Любое количество аргументов с любыми типами, которые можно сконвертить в T.

                  Если у тебя сибилдер 6 - там и с++98 то нету...
                  Ответить
                  • Ну так то да. Но в функцию так разные типы, чтобы они остались разными не передать. Разве что как какой нибудь boost::any или boost::variant. any для printf-подобной функции перебор, но variant учитывая ограниченность возможных типов — вполне.
                    Ответить
                    • Ну так то да. Но в функцию так разные типы, чтобы они остались разными не передать. Разве что как какой нибудь boost::any или boost::variant. any для printf-подобной функции перебор, но variant учитывая ограниченность возможных типов — вполне.
                      Ответить
                  • Да абсолютно так же, как и конструктором из топика.

                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.

                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                  • Да абсолютно так же, как и конструктором из топика.<br />
                    <br />
                    Любое количество аргументов с любыми типами, которые можно сконвертить в T.<br />
                    <br />
                    Если у тебя сибилдер 6 - там и с++98 то нету...
                    Ответить
                • Простите, Вы о чём?
                  Ответить
                • Минутку, и как этим можно будет пользоваться?
                  И да, variadic templates вроде относительно новая штука?
                  (Новая относительно говна мамонта из OP, я имею ввиду.)
                  Ответить
              • variadic template
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template typename... Args
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
              • В очень грубом приближении (по-хорошему надо аккуратно зафорвардить аргументы):<pre><code class="cpp">template <typename... Args>
                OpenArray(Args... args) :
                Count(sizeof...(args)),
                Array(new T[sizeof...(args)] {T(args)...})
                {
                }</code></pre>
                Ответить
            • Вообще, это кааааакбы оправданно.
              Этот самый OpenArray чаще всего используется в паре с вариантным типом для аналога sprintf(), так что ему придется принимать параметры разных типов. Таким образом, обычный метод создания variadic functions тут не прокатит...
              Но все равно выглядит как говно.
              Ответить
          • std::initializer_list не получится. Это гомогенная коллекция. Разные типы не пихаются.
            Ответить
            • std::initializer_list не получится. Это гомогенная коллекция. Разные типы не пихаются.
              Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
          • variadic template
            Ответить
        • Автогенеренный анролинг?
          Ответить
      • <i>fastcall</i>, же
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
      • Для c++98 - обычная практика.
        Ответить
    • показать все, что скрытоа что плохого. это fastcall, всё через резисторы.

      Единственное, можно было бы передать указатели массивом.
      Ответить
      • Минутку, и как этим можно будет пользоваться?<br />
        И да, variadic templates вроде относительно новая штука? <br />
        (Новая относительно говна мамонта из OP, я имею ввиду.)
        Ответить
        • Минутку, и как этим можно будет пользоваться?br /
          И да, variadic templates вроде относительно новая штука? br /
          (Новая относительно говна мамонта из OP, я имею ввиду.)
          Ответить
      • а что плохого. это fastcall, всё через резисторы.

        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить
      • а что плохого. это fastcall, всё через резисторы.<br />
        <br />
        Единственное, можно было бы передать указатели массивом.
        Ответить

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