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

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

06.11.2014, 23:50. Показов 3959. Ответов 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 / 1575 / 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 / 1575 / 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 / 1575 / 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 / 1575 / 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 / 1575 / 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 / 1575 / 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 / 1575 / 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 / 1575 / 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 / 1575 / 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 / 1575 / 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
Ответ Создать тему
Новые блоги и статьи
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
Теория всего 6. Судьба неотвратима?
anaschu 21.07.2026
Математическое доказательство Судьбы: Точка бифуркации в едином тензорном ядре Модели ВсегоСвежее обновление питоновского ядра «Soil Chemistry 2. 0» дало нам неопровержимое математическое. . .
Теория всего 5. ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли
anaschu 21.07.2026
Единое ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли Главная задача «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы» (аттракторов. . .
сукцессия 37. Внедрил дипсик в свой оркестр из ИИ. У него закончилось пространство чата, потому опубликую выводы из его работы здесь
anaschu 21.07.2026
==================================================================== КОНТЕКСТ: Моделирование микоризной сукцессии (AM → ECM) ==================================================================== . . .
сукцессия 36. Делаю прогоны модели около порога бифуркации (превращения эндо микоризы в экто микоризу)
anaschu 21.07.2026
СУКЦЕССИЯ МИКОРИЗ: КАК МАТЕМАТИКА ОБЪЯСНЯЕТ ПОДЗЕМНУЮ ВОЙНУ Мы привыкли думать, что лес — это деревья. А грибы — это то, что мы собираем в корзинку осенью. Но если заглянуть под землю, окажется,. . .
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru