Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2011, 08:27   #191
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Да.
мало того что это пишеться дольше, так еще и не очень читабельно на самом деле(если отбросить любовь к плюсам).
да и в том же С++11 не просто же так foreach принят.
Цитата:
но так или иначе, всё равно мне нужна такая возможность.
возможность чего?
приведите пример с указателем(но не самый банальный), покажу пример без него.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.12.2011, 11:33   #192
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
С++ 09 не существует?! Чёйта вдруг? Он был , есть и будет.
1
2
Цитата:
Сообщение от Utkin
Функциональное программирование показывает, что это заблуждение. Автовывод типов позволяет определить получаемые типы еще до исполнения, а значит генерить те функции, которые будут задействованы.
Казалось бы, при чём тут функциональное программирование?
Я в курсе, что автовывод возможен, меня интересовало, что конкретно произойдёт в одном определённом случае, а также использование операторов над генерическими объектами (что запрещено в большинстве языков с генериками по очевидным причинам)
netrino вне форума Ответить с цитированием
Старый 19.12.2011, 11:42   #193
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

netrino, прекратим этот спор, вы всё равно не правы. Вот ссыль.
Цитата:
приведите пример с указателем(но не самый банальный), покажу пример без него.
Код:
template <class T>
class MyClass
{
    public:
       MyClass()
       {
            getMem();
       }
       ~MyClass()
       {
            relMem();
       }

       inline void addMem()
       {
            chgSize();
       }
    protected:
       inline void getMem()
       {
            p = reinterpret_cast<T*>(malloc(sizeof(T)); // ну или new, не важно
       }
       
       inline void relMem()
       {
           if ( p ) free(p);
       }

       inline void chgSize()
       {
          p = reinterpret_cast<T*>(realloc(2*sizeof(T)));
       }
       
    private:
      T* p;
};
В общем, примерно так. Суть поняли. Мне в таких случаях больше нравятся указатели. Да и вапше я считаю необходимым иметь доступ к куче. Ну хотя бы как в C# сделайте(unsafe {} ), дабы иметь возможность такую
_-Re@l-_ вне форума Ответить с цитированием
Старый 19.12.2011, 12:02   #194
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
netrino, прекратим этот спор, вы всё равно не правы. Вот ссыль.
Могли бы обратить внимание, что статья 2008-го года, данные в ней устаревшие. Я прекрасно помню, как комитет заявил, что новый стандарт выйдет в 2009-м и обозвали его C++09, но они не успели, опоздали ещё на два года, потому C++09 так и не явился миру в официальных документах. Не ранее, чем в августе этого года был наконец принят новый стандарт, первый с 2003-го года, и называется он C++11.
Цитата:
Сообщение от _-Re@l-_
Код:
template <class T>
class MyClass
{
    public:
       MyClass()
       {
            getMem();
       }
       ~MyClass()
       {
            relMem();
       }

       inline void addMem()
       {
            chgSize();
       }
    protected:
       inline void getMem()
       {
            p = reinterpret_cast<T*>(malloc(sizeof(T)); // ну или new, не важно
       }
       
       inline void relMem()
       {
           if ( p ) free(p);
       }

       inline void chgSize()
       {
          p = reinterpret_cast<T*>(realloc(2*sizeof(T)));
       }
       
    private:
      T* p;
};
В общем, примерно так. Суть поняли. Мне в таких случаях больше нравятся указатели. Да и вапше я считаю необходимым иметь доступ к куче. Ну хотя бы как в C# сделайте(unsafe {} ), дабы иметь возможность такую
Пример более чем надуманный. Для этого можно использовать динамические массивы, вроде тех, что в C# или D, или Java
Код:
template <class T>
class MyClass
{
    public:
       MyClass()
       {
            getMem();
       }
       ~MyClass()
       {
            relMem();
       }

       inline void addMem()
       {
            chgSize();
       }
    protected:
       inline void getMem()
       {
            p = new T[1]; // ну или new, не важно
       }
       
       inline void relMem()
       {
           delete[] p;
       }

       inline void chgSize()
       {
          // И, между прочим, тут ошибка - Вы всегда будете выделять массив из двух элементов
          // типа T (2 * sizeof (T) == sizeof(T[2])).
          // p = reinterpret_cast<T*>(realloc(2*sizeof(T)));
          T[] newp = new T[p.length * 2];
          newp[] = p[]; // копирует элементы p в newp
          delete[] p;
          p = newp;
       }
       
    private:
      T[] p;
};

Последний раз редактировалось netrino; 19.12.2011 в 12:04.
netrino вне форума Ответить с цитированием
Старый 19.12.2011, 13:16   #195
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Казалось бы, при чём тут функциональное программирование?
Я в курсе, что автовывод возможен, меня интересовало, что конкретно произойдёт в одном определённом случае, а также использование операторов над генерическими объектами (что запрещено в большинстве языков с генериками по очевидным причинам)
Самое что ни на есть прямое. Автовывод типов это черта функциональных языков (и даже не всех). Кроме того, он позволяет генерить не только нужные функции, но и производить оптимизацию - еще до запуска программы на исполнение. И это при том, что большинство из функциональных языков традиционно строились как интерпретаторы.
Как написал Ваш оппонент:
Цитата:
netrino, прекратим этот спор, вы всё равно не правы.
Только я бы слово Вы написал с большой буквы...
Цитата:
Да и вапше я считаю необходимым иметь доступ к куче.
Зачем? Какая в этом необходимость? Ваш пример не показывает необходимость использования указателей.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 19.12.2011 в 13:20.
Utkin вне форума Ответить с цитированием
Старый 19.12.2011, 13:28   #196
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Самое что ни на есть прямое. Автовывод типов это черта функциональных языков (и даже не всех). Кроме того, он позволяет генерить не только нужные функции, но и производить оптимизацию - еще до запуска программы на исполнение. И это при том, что большинство из функциональных языков традиционно строились как интерпретаторы.
Не мешайте понятия, автовывод типов это черта системы типов Хиндли-Милнера (и ей подобных), а не функциональных языков. Про оптимизации вообще молчу.
Но в чём Вы всё же правы, так это в том, что особого смысла спорить нет.
netrino вне форума Ответить с цитированием
Старый 19.12.2011, 13:56   #197
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Пример более чем надуманный. Для этого можно использовать динамические массивы, вроде тех, что в C# или D, или Java
Не. Не круто. И кстати, ваше безобразие даже не компилируется.
Цитата:
// И, между прочим, тут ошибка - Вы всегда будете выделять массив из двух элементов
Это не ошибка. Я для примера показал. Ясный пряник, что надо по другому.

Последний раз редактировалось _-Re@l-_; 19.12.2011 в 13:59.
_-Re@l-_ вне форума Ответить с цитированием
Старый 19.12.2011, 14:19   #198
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

_-Re@l-_, объясните зачем Вам указатели? Вот просто нафига они Вам нужны? Какие задачи нельзя решить без указателей?

Цитата:
Модель типизации Хиндли — Милнера

Модель типизации Хи́ндли — Ми́лнера — механизм вывода типов выражений, который реализован в некоторых строго типизированных языках программирования. Обычно этот механизм реализуется в рамках функциональной парадигмы программирования, хотя и не ограничен только ей. Примеры языков, которые используют модель типизации Хиндли — Милнера: Haskell, ML, OCaml, Scala, Fortress и Boo.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 19.12.2011, 15:08   #199
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Цитата:
Модель типизации Хиндли — Милнера

Модель типизации Хи́ндли — Ми́лнера — механизм вывода типов выражений, который реализован в некоторых строго типизированных языках программирования. Обычно этот механизм реализуется в рамках функциональной парадигмы программирования, хотя и не ограничен только ей. Примеры языков, которые используют модель типизации Хиндли — Милнера: Haskell, ML, OCaml, Scala, Fortress и Boo
О чём я и говорю, вывод типов имеет отношение к системе типов, а не к функциональной парадигме.

Цитата:
Сообщение от _-Re@l-_
Не. Не круто. И кстати, ваше безобразие даже не компилируется.
Чем же не круто?) Отлично, по-моему. Ничем не хуже указателей, но даже лучше. А что не компилируется - это естественно, это был пример. Но если Вам интересно, то, с помощью небольших изменений, это можно заставить компилироваться в D. Пример.

Кстати, Пепел Феникса, в примере я использовал одну из фич, над которой тоже рекомендую подумать по поводу включения в язык - операции над массивами:
Код:
int[5] a = [1, 2, 3, 4, 5];
int[5] b = a[] + 2;
int[5] c = a[] + b[];

writeln(a); // [1, 2, 3, 4, 5]
writeln(b); // [3, 4, 5, 6, 7]
writeln(c); // [4, 6, 8, 10, 12]
netrino вне форума Ответить с цитированием
Старый 19.12.2011, 15:13   #200
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Кстати, Пепел Феникса, в примере я использовал одну из фич, над которой тоже рекомендую подумать по поводу включения в язык - операции над массивами:
Функция map для того же функционального программирования. Это применение операции к каждому элементу (только в оригинале был список, а не массив). Универсальная - можно натянуть не только арифметику, а любую доступную функцию (включая и определенные программистом).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли подобный текст перевести на человеческий язык? alexxx777 Помощь студентам 0 24.05.2010 19:56
Как создать вид подобный SolidWorks. KemanSR Общие вопросы C/C++ 6 04.05.2010 21:30
Добавить модуль в phpnuke-подобный движок Able2Know Фриланс 3 23.04.2010 16:29
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55