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
мог бы и сам догадаться...
|
|
Guest |
Отправлено: 10.08.2004, 17:05 |
|
Не зарегистрирован
|
Вот Молодец! Вот он ответ.
На счет dfm — это понятно. У меня были варианты например делать DataModule динамически, или нарисовать шаблонный класс оболочку под этот DataModule. Твой вариант снимает все вопросы.
Хочу также узнать : вообще подход с шаблонированием VCL классов — это нормально, нет ли под этим подводных камней? |
|
olegenty |
Отправлено: 11.08.2004, 14:31 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
я не молодец, я только учусь им быть.
template'ы — это более чем норма. тут я далеко не дока. но для профессиональной разработки считаю их просто необходимыми. зачитай книгу Modern С++ Design, и ты просто офигеешь от того, где, как и зачем можно применять template'ы.
|
|
pagan |
Отправлено: 11.08.2004, 16:14 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 22
|
По поводу книги — оный экземпляр которой имеет место на моей полке. Сейчас занят прочитыванием моментов в "Oracle для профессионалов" Тома Кайта, так что думаю в ближайшем будущем вернусь к Modern С++ Design. Правда там не разбирается использование шаблонов применительно в VCL (почему и возник данный вопрос), но думаю: "что не запрешено, то ..."
Кстати сам шаблонный класс TemlateDM, который как раз и выполняет функцию оболочки, можно было оставить в модуле вместе с TDataModule3 (ну это в общем то и так понятно).
Еще раз благодарю за наводку. |
|