На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 332 333 [334] 335 336 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата korvin @
    напиши мне на C++ функцию id как я указал выше, такую, что

    Цитата korvin @
    без шаблонов и кастов.

    Я таки не понял: почему без шаблонов то?
      Потому что это нечестно :)
        Цитата trainer @
        Потому что это нечестно

        Ну не надо сразу ставить невыполнимых условий :) Весь холивар давно показывает, что если надо сделать хоть что-то не на примитивных классах С++ (которые почти и не отличаются от записей), то без шаблонов никуда (и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно) :D
          Цитата Romkin @
          Ну не надо сразу ставить невыполнимых условий :) Весь холивар давно показывает, что если надо сделать хоть что-то не на примитивных классах С++ (которые почти и не отличаются от записей), то без шаблонов никуда (и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно) :D
          Пусть даже так. Что дальше? :) Шаблоны -- языковой механизм, открывающий практически безграничные возможности с одной стороны, при минимальных затратах ресурсов и вычислительной сложности получаемого кода с другой стороны. А теперь ответь мне, какова причина их не использовать?
            Цитата Romkin @
            Весь холивар давно показывает, что если надо сделать хоть что-то не на примитивных классах С++ (которые почти и не отличаются от записей), то без шаблонов никуда
            То, что более-менее знающий C++ программист использует шаблоны чтобы писать код, который он в дальнейшем сможет легко перенастроить и повторно использовать, не значит, что "без шаблонов никуда". Это просто очень удобный инструмент, отказываться от которого очень глупо.
            Цитата Romkin @
            и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно
            И это так, в смысле - это возможно. Некоторые используют C++-компилятор для "С с классами". Просто не всем понятна разница между ними. :)
            Сообщение отредактировано: trainer -
              Цитата Romkin @
              Весь холивар давно показывает, что если надо сделать хоть что-то не на классах С++, то без шаблонов никуда (и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно)

              Скрытый текст
              Если кто будет спрашивать - вся чушь из цитаты вырезана

              На шаблонах в плюсах 1) пишут обобщённый код, для чего собственно они и были введены в язык - никакого приминала не вижу, и 2) используют для метапрограммирования, пусть это и не самый удобный механизм и хотелось бы лучшего, но у двух конкурентов по топику ничего подобно нет и в помине. Так что да, C++ многогранен. А кто вам говорит, что шаблоны изучать необязательно - так покажите мне такого. Ну, а если вы попытались и не получилось - так и покайтесь, что не осилили, здесь все свои.
                В принципе, чтобы написать такую функцию id, шаблоны достаточно знать в объеме 5-минутного ознакомления с соответствующей страницей руководства. Поскольку это пример самого примитивного использования шаблонов.

                Добавлено
                Шаблоны кстати (по словам Страуструпа) первоначально и были введены, чтобы избавиться от необходимости наследования от общего предка. Сразу же выяснилось, что их возможности куда шире. А спустя некоторое время выяснилось, что они еще шире. И т.д.
                  Цитата Romkin @
                  Весь холивар давно показывает, что если надо сделать хоть что-то не на примитивных классах С++ (которые почти и не отличаются от записей), то без шаблонов никуда (и при этом меня уверяли, что С++ многогранен, и изучать шаблоны совсем необязательно) :D

                  Ты просто не разбирался в тех примерах :) . Можно было бы сделать совсем по другому и все в рантайме.
                  Тот же GObject реализует полноценную ОО-систему в С(где шаблонов нет).
                  Просто шаблоны очень удобный механизм. Вот и все.
                    Цитата MyNameIsIgor @
                    Ну, а если вы попытались и не получилось - так и покайтесь, что не осилили, здесь все свои.

                    У меня энту пакость и желания-то изучать нет.
                    Цитата MyNameIsIgor @
                    2) используют для метапрограммирования, пусть это и не самый удобный механизм и хотелось бы лучшего, но у двух конкурентов по топику ничего подобно нет и в помине.

                    Как раз у этих конкурентой для метапрограммирования все есть исходно и в языке, просто мозгу, который запорчен примитавами шаблонов и макросов, врубиться в это невозможно, исключения - редкость :tong:
                      Цитата Romkin @
                      Как раз у этих конкурентой для метапрограммирования все есть исходно и в языке, просто мозгу, который запорчен примитавами шаблонов и макросов, врубиться в это невозможно, исключения - редкость

                      Т.е. вы таки покажете нормальные списки типов в делфях? А то предшественник то ваш эпично слился...
                        Цитата MyNameIsIgor @
                        Т.е. вы таки покажете нормальные списки типов в делфях?

                        Я, похоже, много пропустил. Что подразумевается под "списки типов"?
                          Romkin, давай без оскорблений, а ;) ?
                            Цитата Romkin @
                            Я, похоже, много пропустил. Что подразумевается под "списки типов"?

                            Такое объяснение устроит? Там чуть ранее и пример с кортежами, при реализации которых их можно применить.
                              Накодил свою реализацию кортежей:
                              ExpandedWrap disabled
                                template<typename value_t, int index>
                                class value_holder
                                {
                                public:
                                    typedef value_t value_type;
                                 
                                public:
                                    inline value_holder(const value_type& value) : _value(value)
                                    {
                                    }
                                 
                                    inline value_type& get()
                                    {
                                        return _value;
                                    }
                                 
                                private:
                                    value_type _value;
                                };
                                 
                                class empty_t{};
                                 
                                template<int index>
                                class value_holder<empty_t, index>{};
                                 
                                template<typename value1_t, typename value2_t = empty_t, typename value3_t = empty_t, typename value4_t = empty_t, typename value5_t = empty_t, typename value6_t = empty_t, typename value7_t = empty_t, typename value8_t = empty_t>
                                class tuple
                                {
                                };
                                 
                                template<typename value1_t>
                                class tuple<value1_t> : public value_holder<value1_t, 1>
                                {
                                protected:
                                    template<int type_num>
                                    class type_holder;
                                 
                                    template<>
                                    class type_holder<1>
                                    {
                                    public:
                                        typedef value1_t type;
                                    };
                                 
                                public:
                                    inline tuple(const value1_t& value1) : value_holder<value1_t, 1>(value1)
                                    {
                                    }
                                    
                                    template<int index>
                                    inline typename value_holder<typename type_holder<index>::type, index>::value_type& get()
                                    {
                                        return value_holder<typename type_holder<index>::type, index>::get();
                                    }
                                };
                                 
                                template<typename value1_t, typename value2_t>
                                class tuple<value1_t, value2_t> : public tuple<value1_t>,
                                                                  public value_holder<value2_t, 2>
                                {
                                protected:
                                    template<>
                                    class type_holder<2>
                                    {
                                    public:
                                        typedef value2_t type;
                                    };  
                                 
                                public:
                                    inline tuple(const value1_t& value1, const value2_t& value2) : tuple<value1_t>(value1),
                                                                                                   value_holder<value2_t, 2>(value2)
                                    {
                                    }
                                 
                                    template<int index>
                                    inline typename value_holder<typename type_holder<index>::type, index>::value_type& get()
                                    {
                                        return value_holder<typename type_holder<index>::type, index>::get();
                                    }
                                };
                                 
                                template<typename value1_t, typename value2_t, typename value3_t>
                                class tuple<value1_t, value2_t, value3_t> : public tuple<value1_t, value2_t>,
                                                                            public value_holder<value3_t, 3>
                                {
                                protected:
                                    template<>
                                    class type_holder<3>
                                    {
                                    public:
                                        typedef value3_t type;
                                    };  
                                 
                                public:
                                    inline tuple(const value1_t& value1, const value2_t& value2, const value3_t& value3) : tuple<value1_t, value2_t>(value1, value2),
                                                                                                                           value_holder<value3_t, 3>(value3)
                                    {
                                    }
                                 
                                    template<int index>
                                    inline typename value_holder<typename type_holder<index>::type, index>::value_type& get()
                                    {
                                        return value_holder<typename type_holder<index>::type, index>::get();
                                    }
                                };
                                 
                                ///....
                                 
                                    tuple<int, double, std::string> t(1, 1.1, "111");
                                 
                                    int         int_val = t.get<1>(); // ok
                                    double      dbl_val = t.get<2>(); // ok
                                    std::string str_val = t.get<3>(); //ok
                                 
                                    int         int_val = t.get<1>(); // ok
                                    double      dbl_val = t.get<1>(); // ok
                                    std::string str_val = t.get<1>(); //error
                                 
                                    int         int_val = t.get<2>(); // warning
                                    double      dbl_val = t.get<2>(); // ok
                                    std::string str_val = t.get<2>(); //error
                                 
                                    int         int_val = t.get<3>(); // error
                                    double      dbl_val = t.get<3>(); // error
                                    std::string str_val = t.get<3>(); //ok
                              может реализация немного и страдает, зато результат свернётся в POD структуру (если все элементы кортежа POD) и доступ будет осуществляться непосредственно к нужному полю, без исполнения какого либо побочного кода. Что там делфи может противопоставить, своим rtti и рефлексией? :P
                                Повстанець, да ты что! Там же шаблоны, фиии....
                                :D
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 332 333 [334] 335 336 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.4396 ]   [ 14 queries used ]   [ Generated: 31.07.26, 14:15 GMT ]