С++ forward declaration && using declaration, касательно имен опредленных в классе. |
Здравствуйте, гость ( Вход | Регистрация )
С++ forward declaration && using declaration, касательно имен опредленных в классе. |
kwisp |
1.12.2010, 12:54
Сообщение
#1
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
допустим есть класс в файле a.h
возможно ли применить forward declaration или using declaration именно к перечислению EA ? если да то как? П.С. чет с утра всего 3 градуса тепла - в офисе градусов 14 не больше. запутался. |
|
|
Алексей1153 |
1.12.2010, 13:03
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
к вложенному классу нельзя, а, значит, к перечислению тоже
я в таких случаях делаю внешнее перечисление. |
|
|
kwisp |
1.12.2010, 13:15
Сообщение
#3
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
Алексей1153 |
1.12.2010, 13:29
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
kwisp, то есть, менять его содержимое нельзя ? Или?
тогда такой вариант (да да, опять костыль ))) ): скопируй весь енум, сделай его внешним. Но где-то в коде обязательно поставь проверку, что все значения внешнего совпадают со значениями в классе |
|
|
kwisp |
1.12.2010, 15:05
Сообщение
#5
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
Алексей1153,
дело в том что этот enum мне нужен как параметр шаблона. сам по себе enum это int просто именованный. и легко приводится к int. а вот std::vector<A::EA> к std::vector<int> не приводится некостыльным методом |
|
|
Алексей1153 |
1.12.2010, 15:46
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
kwisp, ой...
а можно пример такой необходимости ? то есть без абстрактного вопроса - конкретную задачу в коде может быть, просто отказаться от std::vector<A::EA> и вместо A::EA использовать int ? или этот вектор в чужом классе определён ? Сообщение отредактировал Алексей1153 - 1.12.2010, 15:47 |
|
|
kwisp |
1.12.2010, 15:51
Сообщение
#7
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
я работаю с рукодельным протоколом обмена по сети.
код протокола поддерживается и ведется не мной. чтоб пользоваться классами протокола нужно включить заголовочник messages.h, хотелось бы его включить только в один cpp файл. поэтому и использую forward declaration различных классов этого протокола в своем заголовочном файле. вот в числе прочих классов протокол предоставляет класс Address в котором есть enum AttrType класс Attribute<Address::AttrType> так вот мне нужно в своем заголовчнике с помощью forward declaration сделать компилябельной строку std::vector< Attribute<Address::AttrType> > attrList_; включать messages.h в свой заголовочник крайне нежелательно. иначе тема не имеет смысла. т.е. я в своем заголовчнике пишу class Address; class Attribute; а с enum как поступить? текущий стандарт не поддерживает forward declaration enum и вложенных классов. есть идеи? или этот вектор в чужом классе определён ? да и в чужом тоже. |
|
|
Алексей1153 |
1.12.2010, 15:53
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
с ходу идея лишь одна:
сделать класс-обобёртку h
cpp
я домой побёг, ночью ещё подумаю ) Сообщение отредактировал Алексей1153 - 1.12.2010, 15:55 |
|
|
Алексей1153 |
1.12.2010, 18:55
Сообщение
#9
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ну вот, как то так и надо. Больше ничего на голову не приходит. То есть, в заголовочниках будет мелькать только класс A , а в реализациях всегда приводить
можно, наверное, это дело замакросить:
|
|
|
Iron Bug |
2.12.2010, 8:07
Сообщение
#10
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
так вот мне нужно в своем заголовчнике с помощью forward declaration сделать компилябельной строку std::vector< Attribute<Address::AttrType> > attrList_; конструкция вида Attribute<Address::AttrType> - это уже template, он зависит от AttrType. а вектор из template - это уже template из template'а. тут нужно, чтобы у твоего внутреннего template'а соблюдались требования внешнего (для вектора это конструктор копии, если не ошибаюсь, и пустой конструктор), иначе копилер не сожрёт. а конструктор копии не может быть template'ом. Сообщение отредактировал Iron Bug - 2.12.2010, 8:14 |
|
|
Текстовая версия | Сейчас: 25.11.2024, 21:25 |