![]() |
|
Модераторы: feodorv |
![]()
|
|
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
mes, а будет ли правильно сделать члены этой структуры константными и для изменения делать const_cast? просто я из геттера возвращаю константную ссылку, сет делаю только из одной части программы.
в общем спасибо, у меня сейчас несколько таких классов, пригодилось ) |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 2 Всего: 135 |
asmdzen, я, конечно, не mes (куда мне), но думаю, это - неправильно
const_cast - штука неприятная. следует её избегать, как чёрт ладана... Никто не запрещает компилятору поместить переменную, задекларированную как const в память, помеченную "только для чтения" (я понимаю, что тут попахивает тем самым животным в том самом безвоздушном пространстве, но тем не менее...). Таким образои, при const_cast'е может произойти сексВиолейшн. ИМХО ( specially for boostcoder ) const_cast нужет только для поддержки старого кода, изменить который ты не можешь, а тебе кровь из носу желательны const'овые выражения -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
нет.. данные наружу отдавайте как конст, а внутри пусть они остаются не константными.. Добавлено через 4 минуты и 21 секунду не только для этого, но действительно он нужен только в _экстремальных_ ситуациях и не стоит его впихивать куда не попади... Добавлено через 6 минут внутри - это внутри логического компонента (объекта или группы объектов) |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
я извиняюсь, никого не хотел обидеть, просто mes это посоветовал - я у него и спросил, конечно спасибо за ответ. у меня сейчас получается из одной крайности в другую, раньше я никаких констов не использовал, все переменные делал глобальными и весь код мог их свободно изменить, проблема была в том что 1. это "добро" работало только для одного потока, 2. невозможно было отследить кто именно изменил определенную переменную. идеальным было бы если разные члены структуры могли изменять только метод(ы) какого то класса (наследованного от чего-то или как-то еще помеченного)
за оффтоп извиняюсь, если решения по этому поводу нет - вопрос снимаю. Это сообщение отредактировал(а) asmdzen - 23.7.2011, 19:59 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
asmdzen, лучше объясни задачу. а то приходится догадываться чего ты хочешь..
|
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
boostcoder, рассинхронизация вышла ))
вопрос вдогонку: есть куча маленьких объектов(функций), все они видят какую-то структуру (похожую на ту что я показал), я сделал для них класс родителя в котором и пристроил эту структуру и эти объекты тоже, они обращаются к членам структуры через указатель на родителя который передается с конструктором. проблема заключается в том что извне я не могу обратится к этим объектам (есть методы типа enable/disable) - следует ли сделать структуру где нибудь еще (в одном из этих объектов) и передавать указатель на нее всем другим (будет прямой доступ к объектам) или следует сделать методы типа get для всех объектов которые возвращали бы константную ссылку? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
функции - не объекты! или же речь о std::function<> или boost::function<> ? или о функциональных объектах?
значит все же функциональные объекты ;) покажи кодом. а то долго синхронизироваться будем. Это сообщение отредактировал(а) boostcoder - 23.7.2011, 20:21 |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
tcp и udp такие же как ip, только изменяют они sport и dport. нужен доступ к объектам ip, udp, tcp. хотелось чтоб saddr и daddr мог изменить только объект ip. Это сообщение отредактировал(а) asmdzen - 23.7.2011, 20:48 |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
первое, по моему очень разумное предложение - переписать это чудо с использованием boost.signals. получится строчек 7 ;) или boost нельзя использовать?
во вторых - у тебя тут segfault!
метод Register сохраняет адреса в вектор. ну вот зарегал ты эти объекты и покинул конструктор. загадка: адреса каких объектов будут лежать в векторе? ;) мое предложение - переписать все накер. Добавлено через 2 минуты и 5 секунд
если критична производительность - я бы вместо std::vector и итераций в run-time, использовал boost::fusion::vector и "итерации" в compile-time ;) это как еще один вариант. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
||||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
ошибочка вышла ) я их через new создаю просто в примере забыл это. я уже убедился что boost это сила, вот только руки не доходят с ним по ближе познакомится, вот и занимаюсь рукоблудием )) boost::signal отличная вешь, почитаю. вот только я думаю или ознакомится с главными частями boost сразу или писать код по старому а то я этот проект никогда не закончу ) Это сообщение отредактировал(а) asmdzen - 23.7.2011, 21:23 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
простите, не понял иронии... Добавлено @ 21:31 asmdzen, мне архитектура видится такой:
http://liveworkspace.org/code/08b24c8a76d6...15d901b687f38b4 Это сообщение отредактировал(а) boostcoder - 23.7.2011, 21:41 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
если быстро : динамический полиморфизм и fusion не совместимы и производительность тут не причем |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
в том то и дело. зачем динамический полиморфизм, если есть возможность обойтись без него? итерация по std::vector в любом случае происходит в рантайме. а еще и в придачу динамический полиморфизм. а вызов виртуальной функции дороже чем обыкновенной. если использовать fusion::vector - то можно использовать статический полиморфизм + никакой итерации в рантайме + никаких виртуальных функций. или я чего-то не понимаю?... |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: нет Всего: 5 |
boostcoder, опять моя ошибка, не правильно показал пример.
в общем программа работает с сетевым потоком, получает буфер данных (последовательность IP пакетов или еще каких), выжимает из него всю полезную информацию. у каждого объекта анализатора должен быть свой список зарегистрированных анализаторов, например какой-то ip туннелинг типа gre, регистрирую gre в ip и ip в gre, ip передает свои данные уже без заголовка gre, тот убирает свой заголовок и передает опять ip. вопрос был в том, следует ли держать все эти объекты в каком-то другом объекте родителе и получать ссылку на них при необходимости или так-же будет нормально и без родителя (с точки зрения правильного проектирования) например мне нужно создать объект обработчик данных (CParrent) но который обрабатывал бы только tcp, для этого мне нужно написать еще какой-то механизм передачи флагов в конструктор, типа такие объекты создаются, такие нет, или создаю дефолтный объект потом делаю disable не нужным объектам (жор памяти но зато get не выдаст ошибку при запросе ненужного объекта) Это сообщение отредактировал(а) asmdzen - 23.7.2011, 21:53 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |