![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| vadiml |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 2 Всего: 7 |
Я создаю класс MyClass, потомка PrevClass, в котором есть структура:
static const Qqqq qqqq; сама структура описана так:
сейчас эта структура инициализируется как
Я хочу убрать из определения этой структуры static и инициализировать её в конструкторе, чтоб у каждого экземпляра класса был свой вариант:
но ни как не придумаю как инициализировать вложенную структуру. Поменять Qqqq я не могу, т.к. она библиотечная. Что можно попробовать или где такое описано? |
||||||
|
|||||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Вообще нихрена не понятно: то ли ты хочешь убрать static(откуда? зачем он там вообще нужен был?), то ли ты уже убрал, но рассказываешь так, будто он там есть...
Если у тебя настолько секретные имена классов/переменных, то постарайся хотя бы переименовать их везде одинакого.
Это сообщение отредактировал(а) archimed7592 - 15.10.2007, 10:30 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 2 Всего: 7 |
названия не секретные, они длинные
а getQqqq() -- не подходит, т.к. здесь обращение к static const Qqqq. А мне надо разные экземпляры Qqqq() для разных экземпляров класса MyClass. Один общий экземпляр структуры Qqqq и сейчас есть. Это сообщение отредактировал(а) vadiml - 15.10.2007, 11:30 |
|||
|
||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Разные на основании чего? Твой конструктор не принимает аргументов, так что мне сложно одуплить как они могут быть разными, но, тем не менее:
Что по сути является рукописным конструктором, но, насколько я понимаю, самого конструктора ты пытаешься избежать чтобы сохранить статус структуры POD, так? Если нет, то просто напиши ей конструктор и делай так:
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| vadiml |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 2 Всего: 7 |
насколько я понимаю, самого конструктора ты пытаешься избежать
Я его не пытаюсь избежать, это библиотечный класс (точнее библиотечная структура) без конструктора, но с вложенной структурой. а
помогло, хотя и чуть в другом виде:
наверное вложенную структуру только так и можно инициализировать |
||||
|
|||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Извини, но условия задачи не совсем понятны (хотя интересны).
Вложенные структуры (например, вложенные классы) ты можешь инициализировать и по-другому. Здесь у тебя главную проблема - то, что вложенная структура идет со спецификатором const, иначе говоря, этот спецификатор требует для нее список инициализации (после этого она становится действительно const), ее нельзя прописать в теле конструктора. Ты можешь прописать список инициализации и в другом виде, но и указанный выше способ является достаточно корректным. С учетом того, что компилятор запретит тебе модифицировать const объект, но они включает в себя указатели, ты можешь модифицировать например сами char'ы, которые адресует const char * str. Это возможно, но является плохим стилем кодирования. Применять не рекомендую (если уж только корректный вариант не устраивает тебя ни в какую, - всякое бывает). Есть еще один совершенно "отвязный" фортель... Но, не думаю, что он тебе понадобится. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
вообще-то в условии константны не указатели, а данные, на которые они указывают
так что можно без проблем их (указатели) менять в процессе работы... -------------------- qqq |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
У константного экземпляра(как в условии) будут константны все его члены, так что не судьба... -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
а... недочитал...
-------------------- qqq |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Иными словами, примерный код (откомпилил, вроде работает)
Это сообщение отредактировал(а) akizelokro - 16.10.2007, 14:45 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
1. Зачем приводить buf к const char * да ещё и c-style кастом 0_о? Не доверяешь компилятору 2. Что ты этим кодом хотел показать? Я что-то мысль не уловил... -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| akizelokro |
|
||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Наоборот, компилятору я доверяю больше, чем себе
Протормозил. Сегодня дергают, вот я и урывками и мимоходом. Смысла в нем не было, и так понятно. -------------------- a = a + b; b = a - b; a = a - b; |
||||
|
|||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 2 Всего: 7 |
||||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Не обязательно -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 2 Всего: 7 |
PS если кого интересует, что это за хитрая структура такая, то это QMetaObject из Qt4, а вложенная структура там помечена как private data, а влазить в нее пришлось, чтоб сделать систему сигналов-слотов динамической, т.е. имея одно описание класса, каждый экземпляр мог иметь свои сигналы-слоты и они задавались при инициализации класса.
Это сообщение отредактировал(а) vadiml - 16.10.2007, 17:52 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |