Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
Unreg
Сообщений: n/a
#1

Паттерн адаптер, помогите реализовать - C++

16.12.2007, 14:20. Просмотров 2354. Ответов 0
Метки нет (Все метки)

Доброго времени суток всем.
Я пишу программу и использованием одной библиотеки (трёхмерный движок irrlicht). У неё очень громоздкие конструкции, так что я хочу сделать её обёртку.
Я создаю абстрактный класс TEngineWrapper (кажется, это называется
интерфейс) и наследую от него класс TIrrlichtWrapper, который реализует... короче, конкретный класс, но
не показываю в остальные модули даже его описания, а выдаю только
описание функции createIrrlichtWrapper, которая всё делает внутри.

class TEngineWrapper
{
public:
virtual someEngineAdaptedFunc() = 0;
};

TEngineWrapper *createIrrlichtWrapper();

// ======= //

#include <irrlicht.h>
class TIrrlichWrapper : public TEngineWrapper
{
public :
virtual someEngineAdaptedFunc() { ... }
};

TEngineWrapper *createIrrlichtWrapper() { return new TIrrlichtWrapper; }

теперь вопросы.
во-первых, как лучше раскидать по файлам этот код? куда что? например делать
engwrp.h, engwrp.cpp, irrwrp.h, irrwrp.cpp ( и xors3dwrp.h, xors3dwrp.cpp,
если возникнет необходимость ) или только engwrp.h и engwrp.cpp? в смысле,
как "правильнее"? как полагается делать?

кроме того, если мне понадобится в интерфейсе обёртки использовать какой нибудь тип,
например для внешнего вида существа TAppearence, который для каждого движка булет свой,
то как мне быть с этим?
Я попробовал сделать интерфейс шаблонным

template< class TAppearence >
class TEngineWrapper
{
public:
virtual TAppearence obtainAppearence() = 0;
};

/*1*/TEngineWrapper *createEngigneWrapper();

// ===== //
#include <irrlicht.h>
class TIrrlichtWrapper : public TEngineWrapper< ISceneNode* >
{
public:
virtual ??? otainAppearence();
};

/*2*/ TEngineWrapper *createIrrlichtWrapper() { return new TIrrlichtWrapper; }


2) что писать на месте ??? ? то есть это получается как формальные и фактические
параметры функции, только ту типы. как с этим быть?
3) и вообще так он мне сделать не даёт.
В /*1*/ он говорит
error C2955: 'TEngineWrapper' : use of class template requires template argument list
В/*2*/ он говорит,
error C2440: 'return' : cannot convert from 'TIrrlichtWrapper *' to 'TEngineWrapper *'
error C2955: 'TEngineWrapper' : use of class template requires template argument list
и он прав.

Как быть с такими типами-параметрами?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2007, 14:20     Паттерн адаптер, помогите реализовать
Посмотрите здесь:

Помогите реализовать шифр цезаря C++
C++ Помогите реализовать программу, возможно за денежное вознаграждение
C++ Помогите с задачей или подскажите как ее можно реализовать!!!
Класс Прямая(Помогите реализовать построение прямой через 1 точку и параллельную ей прямую) C++
C++ Помогите реализовать динамический массив
C++ Помогите реализовать стек на основе массива
паттерн и строка C++ C++
C++ Паттерн Builder
C++ Паттерн декоратор
Помогите реализовать принцип fifo C++
Помогите реализовать стек C++
Как реализовать паттерн C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 12:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru