![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Ситуация:
Есть обычный диалог, порожденный от CDialog Хочу сделать его в виде шаблона: template <class T> class CMyDLG : public CDialog { public: ......................... } Компилятор застревает на макросе BEGIN_MESSAGE_MAP(CMyDLG, CDialog) //{{AFX_MSG_MAP(CGLOSSARYDLG) //}}AFX_MSG_MAP END_MESSAGE_MAP() с сообщением, что необходимо указать список параметров шаблона. Вопрос: кто-нибудь знает как можно обойти подобные ошибки не переписывая макросы? А если один макрос править, потом окажеться что еще половину библиотеки под проект надо править? |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Что даже идей никаких?
P.S. Ответы вроде "MFC написано без поддержки шаблонов" можно не давать. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Я не специалист по MFC,
но я бы попытался сделать так ,исходя что макрос BEGIN_MESSAGE_MAP и т.д. всего лишь реализация функции класса. Во всяком случае так обстоит дело у Borland'а
Может сработает. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Сейчас посмотрел MFC-ский макрос и понял что мое предложение не пройдет
Проще всего макрос руками заменить на его содержание
Ну и так далее -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Я бы уже давно переписал,но все дело в том что:
const AFX_MSGMAP* theClass::GetMessageMap() const \ { return &theClass::messageMap; } \ AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \ { &baseClass::messageMap, &theClass::_messageEntries[0] }; \ AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \ содержит еще три макроса, вероятнее всего каждый из них генериться в разных вариантах для ANSI/UNICODE, winNT/win98,...... Риск, что у заказчика в какойто конфигурации прога не пойдет велик. Хочу быть уверенным наверняка, а в этом варианте значит придеться переписать и эти макросы, в них другие.... |
|||
|
||||
| TaTaP |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 15.10.2002 Репутация: 1 Всего: 1 |
Не знаю, может это и тупой ответ, но многие люди, используя шаблоны, забывают, что все определения шаблонных функций и классов ( и внутренние шаблоны тоже ) нужно описывать в одном файле. Делать как обычно - декларация класса - в одном файле, .h, а реализация - в другом, нельзя. Попробуй все слить в один файл, может прокатит...
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |