|
|
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Возможно ли такое? Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Т.е. до вызова конструктора базового класса, надо установить флажок. Компилятор выдает варнинг, что флажок должен быть инициализирован после базового класса. Можно реализовать это корректно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 13:03 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
И он, редиска, [компилятор] делает по своему. Только множественное наследование? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 13:06 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Можно, если заменить наследование композицией. Или перенести флажок в контекст класса а не экземпляра. C уважением Lord Mayton ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 13:07 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
maytonМожно, если заменить наследование композицией. Или перенести флажок в контекст класса а не экземпляра. Композицией не охота. Большой интерфейс тащить за собой не хочеться, плюс сложность в модификации, если у предка будут новые методы добавляться. Уж лучше множественную. В контекст класса ??? . Статик что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 13:13 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Akh...Т.е. до вызова конструктора базового класса, надо установить флажок.... а можно пример такой задачи то ? может есть пути более ровные ? с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 14:54 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
kolobok0 Akh...Т.е. до вызова конструктора базового класса, надо установить флажок.... а можно пример такой задачи то ? может есть пути более ровные ? с уважением (круглый) Задача такая: Есть класс, который имеет набор функций, вызовом коих управляет базовый класс. В этих функциях происходит доступ к данным (список очередей на векторах). В конструкте базового класса происходит создание потока, который может начать тыркать эти функции. А теперь добаляется фича - при создании объекта надо проинициализировать эти данные, например, загрузить некоторые значения. Допустим из таблицы. Не важно, но заранее не определенные. Как я вижу, стандартные решения - разного рода mutexы и семафоры или средства межпотокового взаимодействия. Но! Загрузка происходит один раз (при создании объекта), все функции работы с данными происходят синхронно (отвечают базовые классы). Так что я здесь не вижу смысла тратить время на дополнительные средства во время установившейся работы программы. Моя идея, проста до невозможности. До создания базового класса поставить флажок, мол, доступ к данным запрещен, после создается базовый класс, потом производится инициализация, после, флажок снимается. В функциях получается затраты ресурсов на один if. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 15:12 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Akh.... До создания базового класса поставить флажок, мол, доступ к данным запрещен, после создается базовый класс, потом производится инициализация, после, флажок снимается. В функциях получается затраты ресурсов на один if. мне пришло на ум две идеи...незнаю насколько это отвечает Вашим требованиям... 1) по умолчанию в базовом - запрет на "доступ к данным", там где это необходимо в производном конструкторе сбрасываем сей флаг (возможно вообще без флага, а просто вызов явно инициализации). 2) если у Вас поток организован внутри базового, то при старт апе дожидаемся конца отработки конструктора, и после этого запрашиваем виртуальный метод - а собственно нам разрешён ли "доступ к данным" ну где то так... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 15:27 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
kolobok0мне пришло на ум две идеи...незнаю насколько это отвечает Вашим требованиям... 1) по умолчанию в базовом - запрет на "доступ к данным", там где это необходимо в производном конструкторе сбрасываем сей флаг (возможно вообще без флага, а просто вызов явно инициализации). 2) если у Вас поток организован внутри базового, то при старт апе дожидаемся конца отработки конструктора, и после этого запрашиваем виртуальный метод - а собственно нам разрешён ли "доступ к данным" ну где то так... с уважением (круглый) 1. Модель предпологает, что базовый класс не знает об ограничениях производных. Эта модель у меня родилась от каждого класса, отвечающего самого за себя. Но в целях ограничения числа потоков, т.к. их использование не оправдано, управление передалось базовым классам. Поэтому нагружать предков своими проблемами не хочу. :) 2. Опять же вопросы у предков. Хотя решение и красивое (т.к. в этой модели как раз все на виртуальных методах и построено), но опять надо загружать предка. Я сразу это решение переродил в более общее - "ну, что, поехали?" :). Но здесь есть несколько но! Во первых, вроде бы, никто нам не разрешить из конструктора вызывать виртуальны метод, а во вторых, запуск потока во время выхода из конструктора базового класса и в входа в производный, чревато тем, что флажек еще не инициализируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 15:52 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
А сорри. Да не из конструктора, а из потока. Но второе но остается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 15:53 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
AkhА сорри. Да не из конструктора, а из потока. Но второе но остается. угумс... да, фаза асинхронная - посему гарантии нет.. тут конечно же язык чешется напомнить о том, что не рекомендуют нагружать конструктора нечто большим чем инициализация переменных...ну, Вам виднее... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 16:03 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Akh 2. Опять же вопросы у предков. Хотя решение и красивое (т.к. в этой модели как раз все на виртуальных методах и построено), но опять надо загружать предка. Я сразу это решение переродил в более общее - "ну, что, поехали?" :). Но здесь есть несколько но! Во первых, вроде бы, никто нам не разрешить из конструктора вызывать виртуальны метод, а во вторых, запуск потока во время выхода из конструктора базового класса и в входа в производный, чревато тем, что флажек еще не инициализируется. Устанвите для каждого уровня свой флажек(бит). Пусть каждый наследник взводит свои флаги (разрешает операции). Полная готовность определяется совпадением маски операции (которую нужно производить) и массива бит флагов готовности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 16:21 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Ладно. Спасибо за советы. Думаю, что пока самым простым вариантом будет множественное наследование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 16:52 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
может, всё-таки вытащить запуск потока куда-нить из конструктора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 17:26 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
maXmoможет, всё-таки вытащить запуск потока куда-нить из конструктора? А зачем? Для этого надо будет плодить функцию init. Я, вообще, не приверженец множественного наследования, но в данном случае это не нагружает всю иерархию классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 17:32 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
чтобы потомки успели сконструироваться, а то это жестоко — что-то начать делать не дождавшись конструктора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 17:37 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
maXmoчтобы потомки успели сконструироваться, а то это жестоко — что-то начать делать не дождавшись конструктора. Да, я тоже об этом думал. Но это дело можно "запомнить" в наследнике. А по завершению конструирования, "вспомнить" и актуализировать данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2006, 17:41 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Возможно ли такое? Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Да, код будет компилироваться. Т.е. до вызова конструктора базового класса, надо установить флажок. Нет, невозможно. И ненужно. Компилятор выдает варнинг, что флажок должен быть инициализирован после базового класса. Можно реализовать это корректно? Это и так корректно и реализовано и будет работать. Что еще надо ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2006, 19:30 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 07:14 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
AkhМоя идея, проста до невозможности. До создания базового класса поставить флажок, мол, доступ к данным запрещен, после создается базовый класс, потом производится инициализация, после, флажок снимается. В функциях получается затраты ресурсов на один if. Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 07:17 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
AkhМоя идея, проста до невозможности. До создания базового класса поставить флажок, мол, доступ к данным запрещен, после создается базовый класс, потом производится инициализация, после, флажок снимается. В функциях получается затраты ресурсов на один if. Создаем Event, синхронизируемся, грохаем Event. В каком месте издержки ? Все описанное мне ОЧЕНЬ не нравится. 1. Базовый флаг не должен знать о каких-то флагах производного. 2. Как порожденный поток будет контролировать этот флаг ? Крутясь в цикле ??? 3. Также напоминаю, что не следует вызывать виртуальные функции в конструкторах, подробности в рекомендации 49 здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 08:57 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) AkhМоя идея, проста до невозможности. До создания базового класса поставить флажок, мол, доступ к данным запрещен, после создается базовый класс, потом производится инициализация, после, флажок снимается. В функциях получается затраты ресурсов на один if. Создаем Event, синхронизируемся, грохаем Event. В каком месте издержки ? Все описанное мне ОЧЕНЬ не нравится. 1. Базовый флаг не должен знать о каких-то флагах производного. 2. Как порожденный поток будет контролировать этот флаг ? Крутясь в цикле ??? 3. Также напоминаю, что не следует вызывать виртуальные функции в конструкторах, подробности в рекомендации 49 здесь Какой эвент? Это про что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 09:55 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто и так корректно и реализовано и будет работать. Что еще надо ? Чтобы не было одновременного доступа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 09:56 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
AkhКакой эвент? Это про что? Объект синхронизации в Windows ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 10:13 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) AkhКакой эвент? Это про что? Объект синхронизации в Windows Какой Windows? ;) Родное CriticalSection(windows), mutex(linux), semafor(linux)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 10:33 |
|
||
|
инициализация до базового класса
|
|||
|---|---|---|---|
|
#18+
AkhКакой Windows? ;) Родное CriticalSection(windows), mutex(linux), semafor(linux)? Друх, я не телепат Слово Linux впервые появляется в предыдушем посте треда. Разумеется, используй то что есть на платформе, зачем извращения с флагами та ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 11:32 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34174503&tid=2029892]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 531ms |

| 0 / 0 |
