Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / архитектура шаблонного класса / 25 сообщений из 26, страница 1 из 2
15.09.2006, 13:04
    #33990014
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
как загнул то :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
template <class Type>
class BaseClass
{
 protected:
  Type* object;
 public:
  BaseClass(Type* o)
  {
    object=o;
    object->init();
  };
  void someMethod()
  {
    object->doSomething();
  };
};

таким образом параметризировать шаблон сможет не абы какой класс, а только такой, который имеет методы ::init() и ::doSomething()

вот вопрос - это нормально так сделать или это моветон?
мне кажется в моей задаче это приемлемое решение, но если это не "красиво" то я могу поискать другие пути :)
...
Рейтинг: 0 / 0
15.09.2006, 13:07
    #33990028
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
А нах?

1. Как то тут расговаривали, что конструктор + рядышком инит - плохой тон.
2. Не понятны цели.
...
Рейтинг: 0 / 0
15.09.2006, 13:09
    #33990037
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
цели долго объяснять.
пишу с++ обертку к одной библиотеке.
...
Рейтинг: 0 / 0
15.09.2006, 13:10
    #33990048
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
тут нет "конструктор + рядышком инит".
тут есть конструктор одного класса и инит совершенно другого.
я помню то обсуждение - это совсем другое.
...
Рейтинг: 0 / 0
15.09.2006, 13:26
    #33990106
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
alex_kтут нет "конструктор + рядышком инит".
тут есть конструктор одного класса и инит совершенно другого.
я помню то обсуждение - это совсем другое.

Тьфу ты. Точно.

Прикольно. Применение класса, только после инициализации? Т.е. сгородить шаблонный класс, только для того, чтобы было определенно, что он инициализирован. Мне кажется это перебор.
...
Рейтинг: 0 / 0
15.09.2006, 13:30
    #33990121
Gryz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
Может быть несколько вариантов Type с doSomething();
...
Рейтинг: 0 / 0
15.09.2006, 13:30
    #33990128
Gryz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
и init(). Кажется, для этого может шаблон пригодиться
...
Рейтинг: 0 / 0
15.09.2006, 13:45
    #33990201
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
GryzМожет быть несколько вариантов Type с doSomething();

Для этого делается интерфейс
...
Рейтинг: 0 / 0
15.09.2006, 13:46
    #33990208
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
да. там на самом деле гораздо больше вариантов.
я пробовал виртуальные классы, но что-то у меня совсем не заладилось :)

шаблоном мне показалось будет лучше...
...
Рейтинг: 0 / 0
15.09.2006, 13:56
    #33990271
Gryz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
Akh GryzМожет быть несколько вариантов Type с doSomething();

Для этого делается интерфейс
Да. Если ты разработчик этих классов.
...
Рейтинг: 0 / 0
15.09.2006, 14:01
    #33990302
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
а что если использовать фабрику для этого дела?

Примерно так (плагиат с Брюса Эккеля):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
class Shape {
public:
  virtual void draw() =  0 ;
  virtual void erase() =  0 ;
  virtual ~Shape() {}
  class BadShapeCreation : public logic_error {
  public:
    BadShapeCreation(string type)
    : logic_error("Cannot create type " + type) {}
  };
  static Shape* factory(const string& type)
    throw(BadShapeCreation);
};
 
class Circle : public Shape {
  Circle() {} // Private constructor
  friend class Shape;
public:
  void draw() { cout << "Circle::draw” << endl; }
  void erase() { cout << "Circle::erase” << endl; }
  ~Circle() { cout << "Circle::~Circle” << endl; }
};
 
class Square : public Shape {
  Square() {}
  friend class Shape;
public:
  void draw() { cout << "Square::draw” << endl; }
  void erase() { cout << "Square::erase” << endl; }
  ~Square() { cout << "Square::~Square” << endl; }
};
 
Shape* Shape::factory(const string& type)
  throw(Shape::BadShapeCreation) {
  if(type == "Circle") return new Circle;
  if(type == "Square") return new Square;
  throw BadShapeCreation(type);
}
 
char* sl[] = { "Circle", "Square", "Square",
  "Circle", "Circle", "Circle", "Square" };
 
int main() {
  vector<Shape*> shapes;
  try {
    for(size_t i =  0 ; i < sizeof sl / sizeof sl[ 0 ]; i++)
      shapes.push_back(Shape::factory(sl[i]));
  } catch(Shape::BadShapeCreation e) {
    cout << e.what() << endl;
    purge(shapes);
    return EXIT_FAILURE;
  }
  for(size_t i =  0 ; i < shapes.size(); i++) {
    shapes[i]->draw();
    shapes[i]->erase();
  }
  purge(shapes);
} ///:~

...
Рейтинг: 0 / 0
15.09.2006, 14:03
    #33990308
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
alex_kда. там на самом деле гораздо больше вариантов.
я пробовал виртуальные классы, но что-то у меня совсем не заладилось :)

шаблоном мне показалось будет лучше...

У меня так ладится.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class classInterf {
    public:
       virtual int doSomething()= 0 ;
}

class class1 public classInterf {
   ...
}

classInterf *cl1 = new class1;
ret=cl1->doSomething();

Даже фабрику сделал благодаря maXmo и blinded.
...
Рейтинг: 0 / 0
15.09.2006, 14:06
    #33990323
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
man_555

В форуме есть топик посвященный фабрике, причем классы сами в ней регистрятся. Не помню, положил ли я туда свой окончательный результат, но там есть много примеров и очень интересно обсуждение.
...
Рейтинг: 0 / 0
15.09.2006, 14:07
    #33990330
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
Gryz Akh GryzМожет быть несколько вариантов Type с doSomething();

Для этого делается интерфейс
Да. Если ты разработчик этих классов.

Конечно. Но автор, все таки разработчик.

Хотя, может он преследует и еще какие-то другие цели.
...
Рейтинг: 0 / 0
15.09.2006, 14:17
    #33990367
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
а если так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
template <class Type>
class BaseClass
{
 protected:
  std::vector<Type*> objects;
 public:
  void create()
  {
    objects.push_back(new Type());
  };
  ~BaseClass()
  {
   //удалить все созданные объекты
  };
  void someMethod()
  {
    object->doSomething();
  };
};

суть в чем.
сам шаблонный класс намного сложнее, но главное в том, что я смогу написать ЛЮБОЙ класс, который имеет метод doSomething() И конструктор по умолчанию.

по сути, это будут разные сигналы от сторонней библиотеки. и я хочу дать возможность пользователю самому определять реакцию на эти события максимально независимо.
...
Рейтинг: 0 / 0
15.09.2006, 14:26
    #33990401
Gryz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
Akh Gryz Akh GryzМожет быть несколько вариантов Type с doSomething();

Для этого делается интерфейс
Да. Если ты разработчик этих классов.

Конечно. Но автор, все таки разработчик.

Хотя, может он преследует и еще какие-то другие цели.
Я имелл ввиду классы T. Он же пишет, что пишет обертку
...
Рейтинг: 0 / 0
15.09.2006, 14:30
    #33990410
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
alex_kа если так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
template <class Type>
class BaseClass
{
 protected:
  std::vector<Type*> objects;
 public:
  void create()
  {
    objects.push_back(new Type());
  };
  ~BaseClass()
  {
   //удалить все созданные объекты
  };
  void someMethod()
  {
    object->doSomething();
  };
};

суть в чем.
сам шаблонный класс намного сложнее, но главное в том, что я смогу написать ЛЮБОЙ класс, который имеет метод doSomething() И конструктор по умолчанию.

по сути, это будут разные сигналы от сторонней библиотеки. и я хочу дать возможность пользователю самому определять реакцию на эти события максимально независимо.


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

Не знаю, плохо ли это в твоей задаче, но твой контейнер, может содержать только объекты опрделенного класса. Если классы разные, то они должны наследоваться от этого класса. Это и есть интерфейс.
...
Рейтинг: 0 / 0
15.09.2006, 14:33
    #33990421
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
GryzЯ имелл ввиду классы T. Он же пишет, что пишет обертку

Пусть автор сам решает, что он пишет. :)

ЗЫ: А что за T? Template?
...
Рейтинг: 0 / 0
15.09.2006, 14:35
    #33990431
Gryz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
Akh GryzЯ имелл ввиду классы T. Он же пишет, что пишет обертку

Пусть автор сам решает, что он пишет. :)

ЗЫ: А что за T? Template?
Конечно. Я имел ввиду Type. Ну которыми подставляются вместо Type :)
...
Рейтинг: 0 / 0
15.09.2006, 16:28
    #33990904
man_555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
Akh man_555

В форуме есть топик посвященный фабрике, причем классы сами в ней регистрятся. Не помню, положил ли я туда свой окончательный результат, но там есть много примеров и очень интересно обсуждение.

Сорри за оффтопик, если не в лом, какая из? Я искал по "фабрика".
...
Рейтинг: 0 / 0
15.09.2006, 16:58
    #33991021
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
man_555
Сорри за оффтопик, если не в лом, какая из? Я искал по "фабрика".

тынц
...
Рейтинг: 0 / 0
15.09.2006, 19:04
    #33991353
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
Извините, но я из ваших кодов ничего не понял, да и ошибок там. Ты спроси русским языком, кстати здорово помогает самому понять чтожк делать.
ЗЫ По аккуратней с этой фабрикой, там синглетон не всякий подходит, то который юзал я не подходит точно - он феникса фабрика набивалась статическими перемеными...
...
Рейтинг: 0 / 0
15.09.2006, 20:37
    #33991470
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
Это нормально требовать от параметра инстанциации шаблонного класса какой-то функциональности, удовлетворения интерфейсам и т.п. Для этого и служат шаблоны, что они это умеют делать.
...
Рейтинг: 0 / 0
15.09.2006, 22:33
    #33991583
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
alex_kпо сути, это будут разные сигналы от сторонней библиотеки. и я хочу дать возможность пользователю самому определять реакцию на эти события максимально независимо.что-то мне это напоминает :) про события топик тоже был: почитай , может, заинтересуешься.
...
Рейтинг: 0 / 0
17.09.2006, 19:37
    #33992747
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
архитектура шаблонного класса
MasterZivЭто нормально требовать от параметра инстанциации шаблонного класса какой-то функциональности, удовлетворения интерфейсам и т.п. Для этого и служат шаблоны, что они это умеют делать.
вот такого примерно ответа я и ожидал :)
все сделал, все работает :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / архитектура шаблонного класса / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]