powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / архитектура шаблонного класса
25 сообщений из 26, страница 1 из 2
архитектура шаблонного класса
    #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
архитектура шаблонного класса
    #33990028
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нах?

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

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

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

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

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

Для этого делается интерфейс
Да. Если ты разработчик этих классов.
...
Рейтинг: 0 / 0
архитектура шаблонного класса
    #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
архитектура шаблонного класса
    #33990308
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
архитектура шаблонного класса
    #33990323
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555

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

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

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

Хотя, может он преследует и еще какие-то другие цели.
...
Рейтинг: 0 / 0
архитектура шаблонного класса
    #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
архитектура шаблонного класса
    #33990401
Gryz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh Gryz Akh GryzМожет быть несколько вариантов Type с doSomething();

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

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

Хотя, может он преследует и еще какие-то другие цели.
Я имелл ввиду классы T. Он же пишет, что пишет обертку
...
Рейтинг: 0 / 0
архитектура шаблонного класса
    #33990410
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
архитектура шаблонного класса
    #33990421
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GryzЯ имелл ввиду классы T. Он же пишет, что пишет обертку

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

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

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

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

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

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

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


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