| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Шаблоны и MFC |
| Автор: DENNN 8.2.2003, 22:11 |
| Ситуация: Есть обычный диалог, порожденный от 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 11.2.2003, 20:39 |
| Что даже идей никаких? P.S. Ответы вроде "MFC написано без поддержки шаблонов" можно не давать. |
| Автор: Vyacheslav 11.2.2003, 21:05 | ||
| Я не специалист по MFC, но я бы попытался сделать так ,исходя что макрос BEGIN_MESSAGE_MAP и т.д. всего лишь реализация функции класса. Во всяком случае так обстоит дело у Borland'а
Может сработает. |
| Автор: Vyacheslav 11.2.2003, 21:54 | ||||
Сейчас посмотрел MFC-ский макрос и понял что мое предложение не пройдет
Проще всего макрос руками заменить на его содержание
Ну и так далее |
| Автор: DENNN 12.2.2003, 04:11 |
| Я бы уже давно переписал,но все дело в том что: 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 15.2.2003, 03:42 |
| Не знаю, может это и тупой ответ, но многие люди, используя шаблоны, забывают, что все определения шаблонных функций и классов ( и внутренние шаблоны тоже ) нужно описывать в одном файле. Делать как обычно - декларация класса - в одном файле, .h, а реализация - в другом, нельзя. Попробуй все слить в один файл, может прокатит... |