Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> полиморфная модификация объектов 
:(
    Опции темы
baldina
Дата 16.11.2011, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



я пытался выяснить, но внятного ответа не получил(((
а советывать не имея исходной информации занятие малополезное.
однако из контекста у меня сложилось некое мнение, что речь идет о программе, работающей с разными (геометрическими?) объектами, над которыми и осуществляются операции при помощи команд. при этом end-user может выбрать множество объектов и выполнить некую команду из общего списка, и она должна быть применена ко всем объектам множества, которые в состоянии обработать такую команду.
если я правильно понял, есть разработчики ядра (ака фреймворк), они добавляют типы и команды и прочие разработчики (они вроде только типы добавляют)

Добавлено через 2 минуты и 49 секунд
мне самому жутко интересно, что же разрабатывается

Добавлено через 5 минут и 44 секунды
почти сразу было понятно, что языковыми средствами не обойтись, но какая именно комбинация средств наиболее подходящая зависит от деталей задачи и распределении ролей в разработке
PM MAIL   Вверх
mes
Дата 16.11.2011, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(baldina @  16.11.2011,  00:20 Найти цитируемый пост)
 при этом end-user может выбрать множество объектов и выполнить некую команду из общего списка, 

эту часть  тс, особенно ревностно оберегает smile так что есть ли этот пресловутый список, или же приходится работать напрямую с интерфейсами, не понянто smile

Цитата(baldina @  16.11.2011,  00:20 Найти цитируемый пост)
почти сразу было понятно, что языковыми средствами не обойтись, но какая именно комбинация средств наиболее подходящая зависит от деталей задачи и распределении ролей в разработке 

 smile именно это и является определяющим фактором выбора, а вот где только подробности об этих стыках..

тема постепенно превращаются в оффтопные мультимонологи  smile 


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 16.11.2011, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(baldina @  16.11.2011,  01:20 Найти цитируемый пост)
я пытался выяснить, но внятного ответа не получил(((

на какой именно вопрос?

Цитата(baldina @  16.11.2011,  01:20 Найти цитируемый пост)
а советывать не имея исходной информации занятие малополезное.

Я уже и не знаю о чем рассказать smile 
Как конечный пользователь будет использовать программу? Все что есть я описал.

Цитата(baldina @  16.11.2011,  01:20 Найти цитируемый пост)
речь идет о программе, работающей с разными (геометрическими?) объектами, над которыми и осуществляются операции при помощи команд. при этом end-user может выбрать множество объектов и выполнить некую команду из общего списка

Да

Цитата(baldina @  16.11.2011,  01:20 Найти цитируемый пост)
должна быть применена ко всем объектам множества, которые в состоянии обработать такую команду

Да. А для тех, которые не поддерживают сгенерировать исключение.


Цитата(baldina @  16.11.2011,  01:20 Найти цитируемый пост)
если я правильно понял, есть разработчики ядра (ака фреймворк), они добавляют типы и команды и прочие разработчики (они вроде только типы добавляют)

Да.

Что еще нужно описать а не понимаю, Вы же все прекрасно понимаете.

Добавлено через 1 минуту и 18 секунд
Цитата(mes @  16.11.2011,  01:49 Найти цитируемый пост)
именно это и является определяющим фактором выбора, а вот где только подробности об этих стыках.

Я же писал об этом несколько раз.

Цитата(baldina @  16.11.2011,  01:20 Найти цитируемый пост)
есть разработчики ядра (ака фреймворк), они добавляют типы и команды и прочие разработчики (они вроде только типы добавляют)

Вот оно.

mes

На Ваш предыдущий пост отвечу позже.
PM   Вверх
mes
Дата 16.11.2011, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(azesmcar @  16.11.2011,  06:29 Найти цитируемый пост)
 Вы же все прекрасно понимаете.

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

Вы там писали что есть интерпретатор с командами, как понимаю они остаются, и Вам необходимо добавить фигуры и осуществить связку.. так ?
если да, то как выглядит условный вызов команды и передача ее на обработку..




--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 16.11.2011, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(mes @  16.11.2011,  09:17 Найти цитируемый пост)
Вы там писали что есть интерпретатор с командами, как понимаю они остаются, и Вам необходимо добавить фигуры и осуществить связку.. так ?

Вот потому я и не хочу выдавать лишнюю информацию. С интерпретатором это никак не связано.
Нет, они не остаются, от этих команд надо избавиться.

Добавлено через 2 минуты и 5 секунд
Цитата(mes @  16.11.2011,  09:17 Найти цитируемый пост)
если да, то как выглядит условный вызов команды и передача ее на обработку..

Код

void MoveSelected::execute(const std::vector<geom*>& selected)
{
    for (geom* obj: selected)
        if (i_movable* m = dynamic_cast<i_movable*>(obj))
            m->move(params().x(), params.y());
}

PM   Вверх
mes
Дата 16.11.2011, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



ну вот хоть что то smile у вас уже есть команды, а мы их изобретаем smile 
и теперь стало сразу понятно, что значила та строчка,о которой допытывал вас baldina (с copy_rectangle)..
мой пример с командой можете забыть (он мог быть вместо вашей командера, но в дополнении не смотрится )

остальное отвечу позже

Это сообщение отредактировал(а) mes - 16.11.2011, 10:08


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 16.11.2011, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(mes @  16.11.2011,  10:05 Найти цитируемый пост)
ну вот хоть что то smile у вас уже есть команды, а мы их изобретаем smile 

Ну вот, я же говорю не надо загружать лишними деталями.
Нет у меня команд, это одна команда на move всего движимого и недвижимого, она понятия не имеет с какого типа объектами она имеет и будет иметь дело.
Это могут быть объекты, которые созданы другой группой, это могут быть наши геометрии.
Абсолютно без разницы откуда это вызывается, главное создать возможность полиморфно обрабатывсть объекты, не зная их реальных типов.

Добавлено @ 10:13
Я видимо очень плохо объясняю. Забудьте про интерпретаторы и команды.
Есть базовый класс geom, есть наследуемые от него разного рода геометрии. Есть predifined список операций, которые можно проводить с этими типами. Некоторые типы поддерживают все операции, некоторые нет. Например точка не поддерживает вращения, а полигон поддерживает.
Операции добавляются и изменяются чаще, чем сами типы, но необходимо оставить возможность добавлять новые типы, не изменяя исходников, так-как возможно добавление типов со стороны третьих лиц.
Все. Задача в этом, все остальное не важно. Вот все требования.

Это сообщение отредактировал(а) azesmcar - 16.11.2011, 10:14
PM   Вверх
mes
Дата 16.11.2011, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(azesmcar @  16.11.2011,  09:10 Найти цитируемый пост)
Ну вот, я же говорю не надо загружать лишними деталями.

есть разница какие интерфейсы требуются коммандеру, юзеру, или для отображения в меню.. 


Цитата(azesmcar @  16.11.2011,  09:10 Найти цитируемый пост)
Нет у меня команд, это одна команда на move всего движимого и недвижимого, она понятия не имеет с какого типа объектами она имеет и будет иметь дело.

Команда как действие у вас условно есть (то есть неважно физическое наличие, важно что мы знаем что команда может вызваться) и надо написать логику команды.. или так называемую связку, в которой как я и понимаю есть та загвоздка..

Добавлено @ 10:29
Цитата(azesmcar @  16.11.2011,  09:10 Найти цитируемый пост)
 не надо загружать лишними деталями.

это была как раз не загружающая, а разгружающая деталь smile

Добавлено @ 10:31
Цитата(azesmcar @  16.11.2011,  09:10 Найти цитируемый пост)
Абсолютно без разницы откуда это вызывается, главное создать возможность полиморфно обрабатывсть объекты, не зная их реальных типов.

да , не важно откуда вызовется, главное что есть вызов, а не пустые предоставлемые пользователю интерфейсы..

Добавлено @ 10:33
вот как раз три слоя и определились : 
коммандер, исполнитель, типы  ( условно C,B,A)
smile
при этом концентрация на втором, с учетом третьего.. 


для начала надо сконцетрировать на предмете.. что такое geom ? 
это некий объект занимающий некий прямоугольник, может быть фигурой, текстом спецсимволом и т.д. 
он может быть сохранен в разных форматах, и отрисован разными рендерами.. 
если он фигура, то над ним могут быть произведены скалирование, перемещение, конвертация    и т.д.
если он текст что то подобное и смена текста.. 
но может быть разработон стороний тип, правила к которому определяется тртьим лицом..

жду поправок smile



Это сообщение отредактировал(а) mes - 16.11.2011, 10:54


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 16.11.2011, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(mes @  16.11.2011,  10:29 Найти цитируемый пост)
это некий объект занимающий некий прямоугольник, может быть фигурой, текстом спецсимволом и т.д. 

Да.

Цитата(mes @  16.11.2011,  10:29 Найти цитируемый пост)
он может быть сохранен в разных форматах, и отрисован разными рендерами.. 

Некоторые из них могут быть сохранены в текстовом виде, возможно в дальнейшем нужно будет добавить и другой формат. Насчет отрисовки - верно, но это нашей задачи не касается, отрисовкой мы не занимаемся, наша задача - editing.

Цитата(mes @  16.11.2011,  10:29 Найти цитируемый пост)
если он фигура, то над ним могут быть произведены скалирование, перемещение, конвертация    и т.д.

Да.

Цитата(mes @  16.11.2011,  10:29 Найти цитируемый пост)
если он текст что то подобное и смена текста.. 

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

Цитата(mes @  16.11.2011,  10:29 Найти цитируемый пост)
но может быть разработон стороний тип, правила к которому определяется тртьим лицом..

Да.

Конкретно в приведенной мною реализации query interface мне не нравится один момент.
Придется заранее разбивать на мелкие интерфейсы, сгруппировать не получиться, так-как после группировки будет невозможно дальнейшее разделение.
Скажем я создал интерфейс i_editable - который поддерживает операции rotate и move, а потом у нас появился тип, который можно перемещать, но нельзя вращать и придется менять кучу кода, чтобы разделить rotate интерфейс от move-а. А в случае с наследованием интерфейсов можно разделить интерфейс на i_rotatable и i_movable, оставить интерфейс i_editable : i_rotatable, i_movable для поддержки старых реализаций.

Добавлено @ 11:24
Цитата(baldina @  16.11.2011,  01:20 Найти цитируемый пост)
мне самому жутко интересно, что же разрабатывается

EDA инструменты smile 

Это сообщение отредактировал(а) azesmcar - 16.11.2011, 11:25
PM   Вверх
xvr
Дата 16.11.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(azesmcar @  16.11.2011,  10:10 Найти цитируемый пост)
Операции добавляются и изменяются чаще, чем сами типы, но необходимо оставить возможность добавлять новые типы, не изменяя исходников, так-как возможно добавление типов со стороны третьих лиц.

А перекомпиляция исходников допускается? Если да, то описать все операции в виде класса с виртуальными методами (по 1 штуке на операцию) и телами, которые бросают исключение - 'not-implemented'. Отдать этот класс на растерзание пользователю, но унаследовать все ваши классы от него.

PM MAIL   Вверх
azesmcar
Дата 16.11.2011, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(xvr @  16.11.2011,  14:16 Найти цитируемый пост)
Если да, то описать все операции в виде класса с виртуальными методами (по 1 штуке на операцию) и телами, которые бросают исключение - 'not-implemented'.

Да, это самое первое, что пришло на ум, но операций довольно таки много, интерфейс базового класса будет похож интерфейс класса std::string smile 
В общем-то решить можно по всякому, но разве это лучший из существующих вариантов?
PM   Вверх
mes
Дата 16.11.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



azesmcar, вот теперь задача обрела очертания.. 

следует уделить внимание разбиению на собственное поведение, и внешне реализованное.. 
так например возвращать себе в сериализованном виде это внутреннее поведение,
а запись в определенном формате внешне реализованный модуль.. 
собсвенное поведение должно быть минимализировано и максимально универсально.. 

недостаток, неохбходимость для сторне разработанного типа динамической регистрации, 
преимущество легкая расширяемость и поддерживаемость (правда с небольшим наличием избыточного кодирования)

но это забегая вперед, а теперь вернемся к текущему : 

Цитата(azesmcar @  16.11.2011,  10:12 Найти цитируемый пост)
Придется заранее разбивать на мелкие интерфейсы, сгруппировать не получиться, так-как после группировки будет невозможно дальнейшее разделение.

Да, об этом изначально говорилось, что интерфейс стремится к единичной "ответственности".. Груповые интерфейсы же представляют собой адаптеры для мелких..  А то что в вас вызывает опасения по этому поводу решается через динамические примеси, которые позволяют  избежать вынужденного кодирования при реализацию этих интерфейсов.. 

пример чуть позже.. 








--------------------
PM MAIL WWW   Вверх
baldina
Дата 16.11.2011, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(azesmcar @  16.11.2011,  07:29 Найти цитируемый пост)
Что еще нужно описать а не понимаю, Вы же все прекрасно понимаете.

это не понимание а телепатия smile
я спросил про фрагмент if (is_reсtangle) cope_rectangle(); но в ответ получил то, что и так из этой строчки ясно
Цитата(azesmcar @  16.11.2011,  10:10 Найти цитируемый пост)
Есть базовый класс geom, есть наследуемые от него разного рода геометрии. Есть predifined список операций, которые можно проводить с этими типами. Некоторые типы поддерживают все операции, некоторые нет. Например точка не поддерживает вращения, а полигон поддерживает.
Операции добавляются и изменяются чаще, чем сами типы, но необходимо оставить возможность добавлять новые типы, не изменяя исходников, так-как возможно добавление типов со стороны третьих лиц.

вот это понятно smile

Цитата(azesmcar @  16.11.2011,  09:21 Найти цитируемый пост)
код C++
Код

void MoveSelected::execute(const std::vector<geom*>& selected)
{
    for (geom* obj: selected)
        if (i_movable* m = dynamic_cast<i_movable*>(obj))
            m->move(params().x(), params.y());
}

почти решает проблему. почти, потому что при расширении набора операций приходится все соответствующие классы наследовать еще от одного интерфейса.

еще остается вопрос с обработкой исключений (хотя это совсем не вопрос, если при несовпадении типа просто ничего не надо делать).
если требуется обработать каждый случай несовпадения типа, можно помещать "провинившиеся" объекты в отдельный список, который обрабатывается по завершении операции. если все несовпадения типа обрабатываются единообразно, это можно делать и внутри цикла.

но это мелочи, обратимся к главной задаче: требуется независимо изменять набор типов и набор операций.
для этого надо сделать типы и операции независимыми, разделить их. концептуально это означает использовать visitor.
к сожалению, это ослабляет систему типов (мы используем внеязыковые средства), но упрощает разработку и сопровождение.
с академической точки зрения тут должен последовать совет о разработке проблемно-ориентированного языка, и в итоге для упрощения реализации мы придем к использованию пакета АОП, но я не столь жесток  smile 
как реализовать?
возможность добавлять новые типы без перекомпиляции обеспечивает динамическая регистрация обработчика и карта(map) обработчиков. про это mes изложил подробно и разнообразно. в дополнение могу предложить перекладывание задачи регистрации на базовый интерфейс, типа
Код

void move_visitor (geom*);
struct IMovable {
  IMoveable () { register(uid_move, move_visitor); }
};

таким образом интерфейсы используются не для наследования, а для задач регистрации обработчиков интерфейса
это позволяет в одних случаях (разработка фреймворка) применять наследование (или шаблоны), а в других (добавление типов пользователями) - явную регистрацию методов
остальное - разработка синтаксического сахара в стиле, который Вам больше нравится

еще замечание. признаться, я не очень верю, что возможных команд очень много. с точки зрения пользователя может и много, но они наверняка классифицируются, и менеджер команд (о котором мы не говорим) в состоянии на выходе иметь ограниченный перечень.
так, например, команды преобразования move, scale, rotate etc суть одна функция transform, если для преобразований используются матрицы. тогда кстати и точку вполне можно вращать ;-)
далее, наверняка реализация команд для разных типов отличается, но этих отличий может быть не очень много и они, в свою очередь, тоже классифицируются. например, графический элемент может иметь ограничения на преобразования, связанные с его состоянием (заблокирован, "заморожен") и с состоянием связанных с ним объектов. с другой стороны, изменение элемента может повлечь изменение элементов, зависящих от него. тогда потребуется некая несложная архитектура выполнения команды типа
Код

  if (!obj->is_frozen())
  {
     obj->transform (matrix);
     obj->check_constraints ();
     obj->changed ();
  }
  

Цитата(azesmcar @  16.11.2011,  11:12 Найти цитируемый пост)
EDA инструменты

ясно. собственно на догадки меня навел пост, где присутствует команда move{0,2}, оч. похоже на всякие CADы


Это сообщение отредактировал(а) baldina - 16.11.2011, 17:09
PM MAIL   Вверх
xvr
Дата 16.11.2011, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(azesmcar @  16.11.2011,  14:23 Найти цитируемый пост)
Да, это самое первое, что пришло на ум, но операций довольно таки много,

Самое главное, что в этом базовом классе не будет ничего другого. Только интерфейсы. И их можно будет легко добавить, ничего больше не меняя
Цитата(azesmcar @  16.11.2011,  14:23 Найти цитируемый пост)
интерфейс базового класса будет похож интерфейс класса std::string

Порезать на логические части и оформить в виде иерархии интерфейсов.
Код


// This is user-extandable part
interface Movable {
 virtual void move(int x, int y) {throw NotImplemented("Movable::move");}
 virtual void ...
};

interface Scaleable {
 virtual void scale(int x, int y) {throw NotImplemented("Scaleable::scale");}
 ...
};

...

interface AllOperations : 
 Movable,
 Scaleable,
 ...
 {};

// This is library
class Figure : public AllOperations {
...
};

Пользователь может добавлять новые методы, новые группы методов, может добавить уровней иерархии в интерфейсы и т.д. и т.п. Но библиотеку придется перекомпилировать 

Цитата(azesmcar @  16.11.2011,  14:23 Найти цитируемый пост)
но разве это лучший из существующих вариантов? 

Пожалуй самый простой. Если устроит, то может и самый лучший  smile 

PM MAIL   Вверх
mes
Дата 16.11.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



ловите примеси  :
http://liveworkspace.org/code/98eac02abcba...b5316128ef8154a


сейчас каждый объект содержит карту, но можно переделать так, чтоб касрта свойств была общая (статическая ) для всего класса..

использовал авторегистрацию для типов, но она накладывает некие ограничения.. если что придется пожертвовать (вот в этом случае как раз жертвуем ;) )

все представленные миксы самодостаточные, но вполне допустимы и захватывающие контекст..

кстати обратите внимание что самопонятие moveable (и ему подобные)  не являются типом и вообще исключены из рациона. 
и команда move реализуется на основе свойств.. 
Это позволяет минимизировать набор свойств и развязать руки при составлении команд.. 

Цитата(mes @  16.11.2011,  18:48 Найти цитируемый пост)
использовал авторегистрацию для типов,

вот одна из вариаций ручной ассоции типов :
http://liveworkspace.org/code/3b5206ae1eed...48112a18a4621b5

те части в которых произошли изменения :
Код

typedef int  mixid_t;
struct mix_typeinfo
{
   int id;
   std::string name;
};

template<typename> 
struct mix_type
{
   static mixid_t get_id ()
   {      
      return info.id;
   }
 
  private: 
    static mix_typeinfo info;
};
//----
template<>
mix_typeinfo mix_type<position>::info =   { 1, "position" };
template<>
mix_typeinfo mix_type<rotation>::info =   { 2, "rotation" };
template<>
mix_typeinfo mix_type<visibility>::info = { 3, "visibility" };
//----


другой подход можно позаимствовать из примера с коммандами (action_type ,  action_rawdata ( в роли идентификатора интерфейса )  )

Это сообщение отредактировал(а) mes - 17.11.2011, 10:13


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.