C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
template VCL class
pagan
Отправлено: 05.08.2004, 16:35


Ученик-кочегар

Группа: Участник
Сообщений: 22



Создаем : File | New | DataModule

При попытке сделать класс своего дата модуля шаблонным, Builder не дает его откомпилировать (т.е. вылетает окно "Declaration of class TDataModule3 is missing or incorrect"). Так вот, каким образом его сделать шаблонным (и возможно ли это)?

CODE
#ifndef Unit3H
#define Unit3H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
template <class TVarchar>
class TDataModule3 : public TDataModule
{
__published: // IDE-managed Components
private: // User declarations
       TVarchar *IntrustLab;
public:  // User declarations
       __fastcall TDataModule3(TComponent* Owner) {};
};
//---------------------------------------------------------------------------

#endif
olegenty
Отправлено: 09.08.2004, 15:05


Ветеран

Группа: Модератор
Сообщений: 2412



бодрый какой. ты захотел, чтобы template стал понимать, то такое dfm???

сделай следующее:
1. создай новый модуль, просто модуль.
2. добавь туда такой текст (например):
CODE

#ifndef Unit2H
#define Unit2H

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>

#include "Unit3.h"
//---------------------------------------------------------------------------
template <class C>
class TemlateDM : public TDataModule3
{
private: // User declarations
   C *m_p;
public:  // User declarations
   __fastcall TemlateDM(TComponent* Owner);
};
#endif


заметь, используется НЕ template'ный TDataModule3 — напихай туда чего угодно. но template не может быть связан с dfm, поэтому создаёшь уже чисто класс C++ TemlateDM на основе существующего VCL

smile.gif

мог бы и сам догадаться...
Guest
Отправлено: 10.08.2004, 17:05


Не зарегистрирован







Вот Молодец! Вот он ответ.

На счет dfm — это понятно. У меня были варианты например делать DataModule динамически, или нарисовать шаблонный класс оболочку под этот DataModule. Твой вариант снимает все вопросы.

Хочу также узнать : вообще подход с шаблонированием VCL классов — это нормально, нет ли под этим подводных камней?
olegenty
Отправлено: 11.08.2004, 14:31


Ветеран

Группа: Модератор
Сообщений: 2412



я не молодец, я только учусь им быть. smile.gif

template'ы — это более чем норма. тут я далеко не дока. но для профессиональной разработки считаю их просто необходимыми. зачитай книгу Modern С++ Design, и ты просто офигеешь от того, где, как и зачем можно применять template'ы.
pagan
Отправлено: 11.08.2004, 16:14


Ученик-кочегар

Группа: Участник
Сообщений: 22



По поводу книги — оный экземпляр которой имеет место на моей полке. Сейчас занят прочитыванием моментов в "Oracle для профессионалов" Тома Кайта, так что думаю в ближайшем будущем вернусь к Modern С++ Design. Правда там не разбирается использование шаблонов применительно в VCL (почему и возник данный вопрос), но думаю: "что не запрешено, то ..."

Кстати сам шаблонный класс TemlateDM, который как раз и выполняет функцию оболочки, можно было оставить в модуле вместе с TDataModule3 (ну это в общем то и так понятно).

Еще раз благодарю за наводку.

Вернуться в Вопросы программирования в C++Builder