Форум программистов, компьютерный форум, киберфорум
Программирование игр
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
#MRoose
 Аватар для MIRAMIX
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416

Хочу стать программистом игр но не знаю стоит зим идти в универ по этой специальности подскажите пж

06.11.2014, 23:50. Показов 3963. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Знаю чтобы стать программистом игр нужно знать много сложной математике. Но не знаю стоит ли идти в универ в Москве чтобы обучиться ею? Самому возможно? Просто нет такой возможности идти учиться так как еще не знаю смогу ли стать программистом.
Мне сейчас 16
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2014, 23:50
Ответы с готовыми решениями:

Ищу книги, статьи, сайты (хочу стать программистом и не знаю с чего начать)
Я вот впервые на форуме, впервые создаю тему и всякое такое. Похож на таракана выброшенного из окна в мир. вообще не понимаю где, что, как....

Хочу стать программистом , но не знаю как начать и как быть !
Хочу научится программированию , пытался освоить : Java , Javascript . Пользовался несколькими сайтами где были задачки , но все эти сайты...

Универы Екатеринбурга, или куда идти чтобы стать программистом
Скоро закончу школу, пора бы призадуматься, куда поступать. Но я незнаком с образовательной структурой Екб. Екатеринбуржцы, какой ВУЗ...

40
211 / 201 / 63
Регистрация: 24.09.2014
Сообщений: 532
15.12.2014, 14:45
Студворк — интернет-сервис помощи студентам
Fulcrum_013,
Ну вообще то первый DirectX сделали три человека и заняло у них это никак не более двух месяцев.
пруф?
к 1995 году, когда они выпустили первый DirectX у них в штате было почти 2 тысячи программистов, не считая тестировщиков и pm'ов
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
15.12.2014, 15:06
Цитата Сообщение от Гром Посмотреть сообщение
Код C++
1
холодильник.push_back(бегемот);
неправильно.
правильно так:
C++
1
2
3
холодильник.дверь.состояние=Open
холодильник.Insert(Бегемот)
холодильник.дверь.состояние=Closed
Вопрос номер №2:
Сколько и каких действий нужно чтобы запихнуть в холодильник слона?

Добавлено через 10 минут
Цитата Сообщение от arrjj Посмотреть сообщение
DOS позволяла разработчику получить прямой доступ к видеокарте, клавиатуре/мыши/джойстику и прочим частям системы, в то время как Windows 95, с её защищённой моделью памяти, предоставляла более стандартизованный, но в то же время весьма ограниченный доступ к устройствам. Microsoft нуждалась в новом способе дать разработчику всё, что ему необходимо. Айслер (Eisler), Сэйнт Джон (St. John), и Энгстром (Engstrom) решили эту проблему, назвав само решение DirectX.
http://www.sbup.com/wiki/DirectX Ну и главный пруф в первом иксе нет ничего такого чтобы три толковых программера не смогли бы сделать за два месяца.

Добавлено через 8 минут
Цитата Сообщение от arrjj Посмотреть сообщение
к 1995 году, когда они выпустили первый DirectX у них в штате было почти 2 тысячи программисто
Programmer-ов или Coder-ов?
0
211 / 201 / 63
Регистрация: 24.09.2014
Сообщений: 532
15.12.2014, 15:56
Fulcrum_013, "разработчиков"
Всего же к 1995 г штат MS состоял из 20 тыс. сотрудников, в числе которых были 1850 разработчиков, 1850 тестировщиков, 400 менеджеров по разработке (program managers) и 2100 инженеров службы поддержки клиентов (customer-support engineers).
как бы там ни было с DirectX'ом его разработчики не делали игры, они делали api для разработчиков игр. (ну максимум техно-демки)
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
15.12.2014, 16:14
Цитата Сообщение от arrjj Посмотреть сообщение
1850 разработчиков
И Programmer и Coder - разработчики, но разного уровня. Кстати в число разработчиков входят и Art-дизайнеры и композитры и т.д.
Цитата Сообщение от arrjj Посмотреть сообщение
они делали api для разработчиков игр
А движок это по вашему что? Api для разработчиков игр.
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
15.12.2014, 16:19
C++
1
2
3
холодильник.дверь.состояние=Open
холодильник.Insert(Бегемот)
холодильник.дверь.состояние=Closed
Руки за такой код надо обрывать. И за нарушение инкапсуляции, и за общий плохокод, и за многое другое. При открывании холодильника всегда лампочка внутри загорается. А у вас она не загорается.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вопрос номер №2:
Сколько и каких действий нужно чтобы запихнуть в холодильник слона?
C++
1
холодильник.push_back(слон);
Если, конечно, вы серьезный разработчик. (а боян про "достать бегемота, засунуть слона, засунуть бегемота" лучше бы не вспоминали. я думаю, он старее вас)
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Programmer-ов или Coder-ов?
Угу, 2000 кодеров и один высший гений, который является единственным творческим человеком во всей этой толпе кодобыдла, креативящий сразу за все две тыщщи.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
15.12.2014, 16:49
Цитата Сообщение от Гром Посмотреть сообщение
Руки за такой код надо обрывать. И за нарушение инкапсуляции, и за общий плохокод, и за многое другое. При открывании холодильника всегда лампочка внутри загорается. А у вас она не загорается.
Во первых гашение зажигание/лампочки инкапсулировано в сеттер свойства дверь.состояние. Во вторых дверь.состояние никак не связано с методом Insert и могут работать абсолютно отдельно.
и опять же при попытке запихнуть так слона у вас ничего не получится, потому что правильно так:
C++
1
2
3
4
холодильник.дверь.состояние=Open
холодильник.Remove(Бегемот)
холодильник.Insert(Слон)
холодильник.дверь.состояние=Closed
Добавлено через 7 минут
Цитата Сообщение от Гром Посмотреть сообщение
Угу, 2000 кодеров и один высший гений, который является единственным творческим человеком во всей этой толпе кодобыдла, креативящий сразу за все две тыщщи
Ну не один на две тысячи, но по опыту общения с американскими заказчиками они разницу четко видят. Объясняю в чем разница - просят написать вычисление дискретной функции по таблице значений. Смотрю в таблицу вижу неопределенное состояние, спрашиваю - а в таком случае чаво делать? Сразу реакция - так ты programmer а не coder? так это совсем другой разговор и уровень задач

Добавлено через 4 минуты
Цитата Сообщение от Гром Посмотреть сообщение
боян про "достать бегемота, засунуть слона, засунуть бегемота" лучше бы не вспоминали. я думаю, он старее вас
А придумал этот баян мой одногрупник Шурик Жуков

Добавлено через 10 минут
Вопрос №3 сколько и каких действий надо чтобы запихнуть в холодильник жирафа?
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
15.12.2014, 17:13
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Во первых гашение зажигание/лампочки инкапсулировано в сеттер свойства дверь.состояние.
В целом принимается, но решение не лучшее. Вместо
C#
1
2
3
4
5
public СостояниеДвери Состояние
{
  set { if (value == Open) {/**/} else if (value == Closed) {/**/}}
  get {/**/}
}
лучше разделить это между двумя функциями Дверь.Открыть и Дверь.Закрыть и вместо изменения свойства вызывать их. По крайней мере, с высоты плюсовой колокольни. Во всяком случае, если заниматься буквоедством, то у вас тег "Код C++", поэтому мы отталкиваемся от функционала и философии плюсов, где свойств с сеттерами нет, ну и т.д. и т.п.

Большой проект силами только тысячи низкоквалифицированных разработчиков-программистов все равно не потянуть. Насчет цифр не уверен, но думаю, что хотя бы 1 высококвалифицированный надсмотрщик на десяток кодеров все равно нужен. А это 200+ хороших спецов (плюс еще пара десятков, координирующих уже их работу). А вообще - кто кому и что доказывает в этой ветке дискуссии, я уже не помню. К изначально заявленной теме это точно имеет мало отношения.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А придумал этот баян мой одногрупник Шурик Жуков
Как минимум, эти задачки были опубликованы в 10 номере журнала "Квант" за 1987 год: ссыль. Ничего не зная про вашего одногрупника (как минимум его возраста), дальнейших предположений делать не берусь.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
15.12.2014, 18:00
Цитата Сообщение от Гром Посмотреть сообщение
где свойств с сеттерами нет
Уже почти как лет 20 имеются. как в С++ Builder так и в Visual С++.
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall дверь::SetСостояние(TСостояниеДвери НовоеСостояние){
         FСостояниеДвери=НовоеСостояние;
         if (OnStateChanged) OnStateChanged(this);
}
void __fastcall Холодильник::DeviceStateChanged(ТDevice *Sender){
      for(int i=0;i<Sensor->Count;i++) Sensors[i]->DoScan();  
}
void __fastcall КонцевойВыключатель::DoScan(){
      FConnectedActuator.Состояние=!FPushDevice.Состояние; //вот так вот лампочку и переключаем 
}
Добавлено через 1 минуту
Цитата Сообщение от Гром Посмотреть сообщение
Как минимум, эти задачки были опубликованы в 10 номере журнала "Квант" за 1987 год: ссыль.
А вот третья задачка которой там нет как раз и была придумана в 1996-ом

Добавлено через 14 минут
Цитата Сообщение от Гром Посмотреть сообщение
Насчет цифр не уверен, но думаю, что хотя бы 1 высококвалифицированный надсмотрщик на десяток кодеров все равно нужен.
Там немного другие расклады. По поводу всякой объемной мелочи конвейер. Одни что то типа блоксхем клепают, другие по ним код набирают (включая и километровые хидеры с константами). третьи все это собирают до кучи и компилят. Четвертые занимаются отладкой. А вот по критичным местам, типа ядра операционки и т.п. там как раз небольшие группы очень высококвалифицированных спецов.
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
15.12.2014, 18:33
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Уже почти как лет 20 имеются. как в С++ Builder так и в Visual С++.
Только как расширения языка от данных конкретных производителей. В самом языке их и по сию пору нет (до C++ 11 включительно, насчет 14 не хочется уточнять, но почти наверняка и там они напрочь отсутствуют). Равно как нет сигналов-слотов, хотя они присутствуют как расширения в Qt (а код на стандартном C++ исходя из них генерит MOC), и многого другого. Мы же не будем говорить, что в C++ есть [подставьте сами] только благодаря тому, что оно есть в какой-либо библиотеке, которую можно использовать на плюсах.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А вот третья задачка которой там нет как раз и была придумана в 1996-ом
Ну меня там не было, хотя теоретически за девять лет эту задачку мог успеть придумать кто угодно. Впрочем, за отсутствием надежной доказательной базы и документальных свидетельств, оставим данный вопрос открытым.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
15.12.2014, 19:13
Цитата Сообщение от Гром Посмотреть сообщение
Только как расширения языка от данных конкретных производителей
Вообще то как на С++ Builder так и на Visual C++ есть стандарт ANSI.
Цитата Сообщение от Гром Посмотреть сообщение
только благодаря тому, что оно есть в какой-либо библиотеке, которую можно использовать на плюсах
Собственно говоря кроме библиотек некоторые из которых тоже входят в стандарт в плюсах вообще ничего нет. Да и вообще С изначально задумывалась именно для работы со стандартизированными библиотеками. Таким образом тогда реализовывалась кросс-платформенность. Кстати ООП в плюсах изначальном варианте реализовывалось средствами препроцессора, но это не значит что ООП в плюсах нет, а ООП на уровне компилятора - расширения от конкретных производителей. Да кстати CALLBACK функция вобщем то от слот- сигналов ничем не отличается, а они не то что в плюсах, еще в C были. А вообще indirect call котрый лежит в основе всех этих слот-сигналов появился вместе с первыми электронными компами и ни минутой позже.
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
15.12.2014, 19:51
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вообще то как на С++ Builder так и на Visual C++ есть стандарт ANSI.
Стандарт не запрещает расширения языка. Компиляторы этих сред удовлетворяют стандарту, а то, что эти IDE добавляют еще - до определенной степени их личное дело. Насколько я понимаю (никогда глубоко в этом не копался за ненадобностью), свойства в них с помощью препроцессинга или еще какого средства генерации кода превращаются в код, соответствующий стандарту, который затем и скармливается компилятору.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Собственно говоря кроме библиотек некоторые из которых тоже входят в стандарт в плюсах вообще ничего нет.
Есть операторы, различные инструкции, классы, шаблоны... Короче говоря, ядро языка. Да, в нем нет узкоспециализированных средств, на то плюсы и язык общего назначения. Стандартная библиотека добавляет довольно много всего (но все еще мало специализированных инструментов). Но стандартная библиотека - это по умолчанию часть языка C++. Просто это та часть, которую можно подключать в конкретные проекты определенными фрагментами по мере необходимости.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Кстати ООП в плюсах изначальном варианте реализовывалось средствами препроцессора, но это не значит что ООП в плюсах нет, а ООП на уровне компилятора - расширения от конкретных производителей.
ООП средствами препроцессора - это можно считать еще "Си с классами". Конечно, Страуструп сначала писал просто транслятор в Си-код, и только через некоторое время был создан полноценный компилятор. Но ООП в плюсах описывается стандартом, оно является частью языка, и каждый производитель компилятора должен реализовывать его именно так, как указано в стандарте. А свойств в стандарте никогда и не было, поэтому они - сторонние расширения.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Да кстати CALLBACK функция вобщем то от слот- сигналов ничем не отличается, а они не то что в плюсах, еще в C были.
Сигналы и слоты, которые имеют место быть в Qt (я говорю именно о них) таки сильно отличается от просто CALLBACK функции. Ну это, пожалуй, очевидно.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А вообще indirect call котрый лежит в основе всех этих слот-сигналов появился вместе с первыми электронными компами и ни минутой позже.
Давайте не будем путать идиомы и их непосредственную реализацию, особенно ситуацию существования идиомы и ситуации включения ее реализации в стандарт языка. На Си и даже на языке ассемблера можно писать объектно-ориентированный код, можно использовать эту идиому. Но они ее не поддерживают.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
15.12.2014, 20:31
Цитата Сообщение от Гром Посмотреть сообщение
Сигналы и слоты, которые имеют место быть в Qt
чем это:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <QObject>
class Counter : public QObject
{
    Q_OBJECT
    public:
        Counter() { m_value = 0; }
        int value() const { return m_value; }
    public slots:
        void setValue(int value);
    signals:
        void valueChanged(int newValue);
    private:
    int m_value;
};
 
void Counter::setValue(int value)
{
       if (value != m_value) {
       m_value = value;
       emit valueChanged(value);
}
Отличается от вот этого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typedef void __fastcall (__closure *TValueChangedEvent)(int NewValue);
class TCounter{
        private:
             int FValue;
        protected:
              void __fastcall SetValue(int aValue); 
        public:
              __property int aValue={read=FValue,write=SetValue};
              TValueChangedEvent OnChange;
};
void __fastcall TCounter::SetValue(int NewValue){
      if (FValue==NewValue) return;
      FValue=NewValue;
      if(OnChange) OnChange(NewValue); 
}
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
15.12.2014, 20:59
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
чем это:
Отличается от вот этого:
NIH (Not invented here).
А если серьезно - то хотя бы тем, что один сигнал вы можете связать со множеством слотов, и к любому слоту вы можете подключить сразу множество сигналов. Классы, которые участвуют в сигнально-слотовых связях ничего не знают друг о друге, установление этой связи происходит вне любого из них. Пара приятных мелочей - сигнал можно связать с другим сигналом, при удалении одного из участников связи эта связь автоматически разрывается.

Нет, конечно, вы можете реализовать все это и сами, но неблагодарной работы будет много. И появление ошибок в этом сложном коде будут довольно вероятны (со сложным кодом всегда так - никто не умеет его писать с первого раза правильно, и хорошо если ошибки будет легко отловить и поправить...). В Qt механизм сигналов и слотов реализован до вас, и сделано это очень хорошо.

Ах да, огромное количество кьютовских классов уже имеют множество полезных сигналов и слотов. Насколько мне известно, в билдере ничего такого нет, и динамически связывать событие нажатия самой паршивой кнопки с множеством различных приемников без создания собственных подклассов никак не получится. Мелочь, а неприятно.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
15.12.2014, 21:14
Цитата Сообщение от Гром Посмотреть сообщение
без создания собственных подклассов никак не получится
получится, но это дофига кода на каждый сигнал, с подклассами(вернее с одним вложенным объектом на каждый сигнал) действительно удобней и проще. Ну а если честно - еще не разу не сталкивался с тем чтобы Event необходимо было бы отправить сразу нескольким получателям кроме как своим Childs. Ну а куча Event на один обработчик так это и так есть. Да еще можно вспомнить старый забытый всеми метод - сообщения, которые все это тоже позволяют делают и без всяких проблем, хотя конечно и потребуется явный код обработки.

Цитата Сообщение от Гром Посмотреть сообщение
И появление ошибок в этом сложном коде
Если вы цикл и динамический массив считаете сложным кодом, то до С++ вам действительно еще дорасти надо.
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
15.12.2014, 22:33
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
получится, но это дофига кода на каждый сигнал, с подклассами(вернее с одним вложенным объектом на каждый сигнал) действительно удобней и проще.
Ну а в Qt не нужно даже реализовывать подклассов. Просто пишем
C++ (Qt)
1
2
auto btn = new QPushButton("Press me!");
connect(btn, SIGNAL(clicked()), SLOT(startRocket()));
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ну а если честно - еще не разу не сталкивался с тем чтобы Event необходимо было бы отправить сразу нескольким получателям кроме как своим Childs.
Ну самое банальное - когда вводим числовое значение с помощью синхронизированных ползунка (QSlider) и спин-бокса (QSpinBox) для пущего удобства. С помощью ползунка можно быстро установить примерное значение, а с помощью спинбокса - уточнить его до строго необходимого. Соответственно, оба они посылают сигнал valueChanged и друг другу, и конечному приемнику.

А можно и так (у двух объектов один сигнал на четыре слота, еще у двух за кадром - один сигнал на два слота):
C++
1
2
3
4
5
6
7
8
9
10
11
12
auto sldrMaxVal = new QSlider;
auto editMaxVal = new QSpinBox;
 
auto sldrCurrVal = new QSlider;
auto editCurrVal = new QSpinBox;
 
connect(sldrMaxVal, SIGNAL(valueChanged(int)), editMaxVal, SLOT(setValue(int)));
connect(sldrMaxVal, SIGNAL(valueChanged(int)), editCurrVal, SLOT(setMaximum(int)));
connect(sldrMaxVal, SIGNAL(valueChanged(int)), sldrCurrVal, SLOT(setMaximum(int)));
connect(sldrMaxVal, SIGNAL(valueChanged(int)), SLOT(onMaxValChanged(int)));
 
// То же самое для спинбокса...
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если вы цикл и динамический массив считаете сложным кодом, то до С++ вам действительно еще дорасти надо.
Если мы пишем что-то серьезное, то цикла и динамического массива нам будет мало (хмм... надеюсь, вы имеете в виду не си-подобные массивы а-ля int* arr = new int[10]; - ведь есть такой выбор стандартных контейнеров, не говоря уже о сторонних!).

Вот, например, что делать, если мы удаляем приемник сигнала, а после этого пытаемся этот сигнал послать. Отправитель никак не может знать, что где-то там далеко был удален объект приемника. А значит, приемник должен сам в деструкторе уведомить об этом всех отправителей для всех своих слотов...

Итак, имеем не только для каждого отправителя кучу списков указателей на слоты - для каждого сигнала! (для каждого объекта список приемников сигнала clicked, список приемников сигнала resized, список приемников сигнала...) - но и для каждого приемника список отправителей, подключенных к каждому его слоту!!

При установке каждого соединения вы должны добавить в каждый список взаимные ссылки отправителя и получателя. В деструкторе получатель обязан уведомить каждого отправителя о своем уничтожении, чтобы тот выкинул соответствующие указатели из своих списков (из каждого, если есть). Ах да, теперь у нас получатель обращается к приемникам. Значит, приемники тоже при уничтожении сообщать получателям, что связь нужно разорвать.

Окей, мы выносим всю эту технику в базовый класс типа ConnectiveObject. Но теперь потомки должны еще регистрировать все свои сигналы и слоты в нужных местах базового класса. А прикрутить сигналы-слоты к TButton теперь совсем ужасно - придется наследоваться от ConnectiveObject и TButton, и в полученном третьем классе как-то увязывать между собой их интерфейсы. Бррр...

Ради интереса - попробуйте как-нибудь реализовать такую функциональность. Хотя бы чтобы можно было связывать один сигнал со множеством слотов, и один слот со множеством сигналов, а при удалении участников связи эта связь автоматически рвалась. Ну и потом создать наследников от уже существующих классов библиотеки VCL, которые бы обладали этой функциональностью. А я пока вспомню, чем еще хороши сигналы и слоты в Qt...

P.S. Ничего не знаю про __closure - можно ли с его помощью создавать указатели на функции-члены разных классов, функции нечлены, лямбды? И чтобы при этом эти __closure указатели во всех случаях были одного типа (предполагая, что список параметров и возвращаемое значение у всех них одинаковое)?
Т.е. вообще можно ли в один список засунуть указатели на приемники разных типов, при том, что часть слотов - функции-члены, часть - просто функции, а часть - лямбда-функции.
Если нет, то вам для того, чтобы догнать сигналы-слоты Qt (в частности, новый синтаксис, добавленный в Qt 5), придется еще реализовывать обобщенный функтор (а для этого - прочитать Александреску...), который уже можно будет в этот список поместить.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
15.12.2014, 23:40
Цитата Сообщение от Гром Посмотреть сообщение
Окей, мы выносим всю эту технику в базовый класс типа ConnectiveObject. Но теперь потомки должны еще регистрировать все свои сигналы и слоты в нужных местах базового класса. А прикрутить сигналы-слоты к TButton теперь совсем ужасно - придется наследоваться от ConnectiveObject и TButton, и в полученном третьем классе как-то увязывать между собой их интерфейсы. Бррр.
А вам не кажется что все гораздо проще? про такую штуку как ROT никогда не слышали? и обойдется все без множественного наследования.[quote="Гром;6992336"]Т.е. вообще можно ли в один список засунуть указатели на приемники разных типов, при том, что часть слотов - функции-члены, часть - просто функции, а часть - лямбда-функции.
Цитата Сообщение от Гром Посмотреть сообщение
P.S. Ничего не знаю про __closure - можно ли с его помощью создавать указатели на функции-члены разных классов, функции нечлены, лямбды? И чтобы при этом эти __closure указатели во всех случаях были одного типа (предполагая, что список параметров и возвращаемое значение у всех них одинаковое)?
надеюсь знаете что Obdject.Method() равносильно Method(Object); соответственно для indirect вызова метода нужно два указателя - один указывает на Object а второй на Method. То бишь запихнуть в один список указатели на методы объектов вообще никак не связанных между собой классов вообще не проблема, элементом списка должна быть просто структура содержащая два указателя. сообственно __сlosure и есть такая структура. typedef-ом они объявляются именно для того чтобы компилятор проверял сигнатуру.
Т.е. вообще можно ли в один список засунуть указатели на приемники разных типов, при том, что часть слотов - функции-члены, часть - просто функции, а часть - лямбда-функции.
Вы имеете в виду на приемники с разной сигнатурой? Можно но не нужно. Хотя это класс ConnectionObject очень сильно упростит.
Если нет, то вам для того, чтобы догнать сигналы-слоты Qt
а мне НЕ НАДО их догонять.Я же говорю - не видел ни разу чтобы надо было послать уведомления объектам о существовании которых не известно в принципе. Зато вот зациклить сигналы как понимаю гораздо проще чем event-ы.
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
16.12.2014, 00:15
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
про такую штуку как ROT никогда не слышали?
Ни разу. Нагуглить тоже не удалось. Что это?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
надеюсь знаете что Obdject.Method() равносильно Method(Object); соответственно для indirect вызова метода нужно два указателя - один указывает на Object а второй на Method. То бишь запихнуть в один список указатели на методы объектов вообще никак не связанных между собой классов вообще не проблема, элементом списка должна быть просто структура содержащая два указателя. сообственно __сlosure и есть такая структура. typedef-ом они объявляются именно для того чтобы компилятор проверял сигнатуру.
Что-то вроде этого я и подозревал. А может ли __closure содержать указатель на обычную функцию (не являющуюся членом никакого класса) или лямбда-функцию?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вы имеете в виду на приемники с разной сигнатурой? Можно но не нужно. Хотя это класс ConnectionObject очень сильно упростит.
Между тем, часто это может быть нужно. Поэтому хотелось бы получить гибкий функционал.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
а мне НЕ НАДО их догонять.Я же говорю - не видел ни разу чтобы надо было послать уведомления объектам о существовании которых не известно в принципе.
Вероятно, вы не практикуете повторное использование кода, и пишете сугубо одноразовый код. Чем меньше классы знают друг о друге, чем слабее они связаны, тем проще их повторно использовать. Вон кнопки ничего не знают о том, кто использует информацию об их нажатии. Просто нажимаются себе и все. Поэтому их можно реюзать без особых проблем.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Зато вот зациклить сигналы как понимаю гораздо проще чем event-ы.
Насколько помню, у меня сигналы ни разу не зацикливались. То ли это я так правильно их использую, то ли это они так хорошо написаны. Даже не знаю, что лучше ("и то, и то", конечно, идеально).
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
16.12.2014, 00:56
Цитата Сообщение от Гром Посмотреть сообщение
Вон кнопки ничего не знают о том, кто использует информацию об их нажатии. Просто нажимаются себе и все. Поэтому их можно реюзать без особых проблем.
и есть куча способов это реализовать. Я в свое время начинал с такого SendEvent(evBroadcast,Command); Кстати никто не запрещает назначить обработчиком события кнопки метод объекта класса ConnectiveObject который разошлет сколько там к нему подписалось потребителям. У нейрона аксон тоже один, а дендритов куча. А насчет в принципе неизвестно - это о потребителях о существовании которых вообще неизвестно в DesignTime. Я имею в виду мне не известно а не кнопке.
Цитата Сообщение от Гром Посмотреть сообщение
Насколько помню, у меня сигналы ни разу не зацикливались
- то ты их просто наверное ни для чего кроме связывания кнопок не использовал.
Цитата Сообщение от Гром Посмотреть сообщение
Ну а в Qt не нужно даже реализовывать подклассов. Просто пишем
а в С++ делаем так:
C++
1
2
    btn=new TButton();
    btn->OnClicn=Object.OnButtonClick();
При этом сделать УНИВЕРСАЬНЫЙ Object рассылатель сигналов - вообще не вопрос.
Кстати а почему никто не кричит что все эти EventListener и тд в JavaScript с самого рождения существуют?

Добавлено через 20 минут
PS А вы кстати под доской перехватом прерывавний никогда не занимались? Смысл там тот же - слотов и сигналов. Только схема реализация немного другая - каждый получатель сам следит за тем чтобы отправить сигнал дальше по цепочке, и удалить себя из цепочки при выгрузке. Реализовать механизм, но так чтобы за передачей сигналов и добавлением/удалением получателей следил сторонний механизм - ну как бы вообще не вопрос. Набор двусвязных списков по большому счету.
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
16.12.2014, 01:02
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
и есть куча способов это реализовать. Я в свое время начинал с такого SendEvent(evBroadcast,Command); Кстати никто не запрещает назначить обработчиком события кнопки метод объекта класса ConnectiveObject который разошлет сколько там к нему подписалось потребителям.
Это вот сейчас что было? Пример на слабую связность?
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А насчет в принципе неизвестно - это о потребителях о существовании которых вообще неизвестно в DesignTime. Я имею в виду мне не известно а не кнопке.
Я нигде не говорил о приемнике, неизвестном программисту. Приемник должен быть неизвестен классу-отправителю. Вообще не знаю, откуда вы это взяли.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
а в С++ делаем так:
Не в C++, а в C++ Builder. Ладно, попробуем:
C++
1
2
btn->OnClick=Object1.OnButtonClick();
btn->OnClick=Object2.OnButtonClick();
Черт.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
При этом сделать УНИВЕРСАЬНЫЙ Object рассылатель сигналов - вообще не вопрос.
Я уже теряюсь в этих обрывочных репликах. Что вы подразумеваете под универсальным обжектом рассылателем сигналов? Желательно привести интерфейс и вкратце расписать его функционал.

И что все-таки такое ROT, и как он поможет вам сделать это:
Цитата Сообщение от Гром Посмотреть сообщение
чтобы можно было связывать один сигнал со множеством слотов, и один слот со множеством сигналов, а при удалении участников связи эта связь автоматически рвалась. Ну и потом создать наследников от уже существующих классов библиотеки VCL, которые бы обладали этой функциональностью.
Ну и чтобы сигнал можно было связать с обычными функциями и с лямбдами?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
16.12.2014, 01:18
Цитата Сообщение от Гром Посмотреть сообщение
Ни разу. Нагуглить тоже не удалось. Что это?
Running Objects Table. Каждый объект заносит указатель на себя в ROT при создании. ConnectiveObject (я имею ввиду объект который собственно и соответствует дендронам) хранит не указатели на объекты а номера записей из ROT и указатели на методы. При рассылке указатель берется из ROT. При удалении потребителя указатель ROT обнуляется. Увидев нулевой указатель в ROT СonnectiveObject удаляет потребителя из ссылки рассылки. И НИКАКИХ СПИСКОВ К КОМУ ПОДКЛЮЧЕН ПОТРЕБТИТЕЛЬ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2014, 01:18

Стоит ли идти работать программистом?
Я понимаю,скорее всего я создал эту тему не там,где нужно(никакой &quot;курилки&quot; ,увы, я так и не нашел) 1.На данный момент мне 16,заканчиваю...

Хочу стать программистом C++
Привет всем! У меня одна проблема . Хочу изучить язык C++ и начать программировать... На некоторых форумах не которые пишут , что C++ язык...

Хочу стать программистом
Здравствуйте! Хочу стать программистом. У меня фундамент с C++ и JavaScript и QBasic 45. Прощу, скажите, с чего мне начать и продолжить? ...

Хочу стать программистом!
Добрый день! Очень захотелось овладеть замечательной современной профессией и взгляд упал на программирование. Что это такое, с какой...

Хочу Стать Программистом 1с
Здравствуйте, программисты 1с) решила обратиться к вам на этом форуме с тем, чтобы вы помогли мне советом. В этом году я закончила...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru