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

Групповая обработка разнотиповых объектов? - C++

Восстановить пароль Регистрация
 
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
16.01.2013, 21:27     Групповая обработка разнотиповых объектов? #1
Есть шаблон исходных объектов:
C++
1
2
3
4
5
6
7
8
template <class Type, cint NumberDimension> class MyArray
{
public:
 
Type* Array;
 
void MyFunc();
}
Надо написать объект ("Manager"), который будет сохранять набор разнотиповых объектов в себе и потом массово их обрабатывать:

C++
1
2
3
4
5
6
7
8
9
10
MyArray<double> MyArray1;
...
MyArray<int> MyArrayN;
 
 
Manager.Add(MyArray1);
...
Manager.Add(MyArrayN);
 
Manager.MyFunc_ForAll();
Как это сделать самостоятельно без STL?

Можно определить абстрактный класс и с функцией "MyFunc" и от него унаследовать объект "MyArray" (реализовав функцию "MyFunc"). Но у Страуструпа написано, что абстрактные функции замедляют работу программы. Хотелось бы остаться с хорошей производительностью.

Как выкрутиться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2013, 21:27     Групповая обработка разнотиповых объектов?
Посмотрите здесь:

C++ Массивы объектов
Массив объектов C++
C++ В программе реализовать возможность записи объектов в файл и чтения объектов из файла
C++ Массивы объектов
C++ Массивы объектов в С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
16.01.2013, 21:39     Групповая обработка разнотиповых объектов? #2
сделать просто и понятно. если знаете как с абстрактными функциями - значит с ними.
сделать корректно работающую вещь.
измерить производительность, сделать выводы.
если производительность действительно просела именно из-за принятого решения - переделать.
заранее думать об оптимизации и городить огород - зло.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
16.01.2013, 21:41     Групповая обработка разнотиповых объектов? #3
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Как выкрутиться?
Вот так и выкрутиться, как вы написали. Виртуальные функции замедляют каждый вызов функции ровно на одну косвенную адресацию, это нисколечки не страшно.
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
17.01.2013, 12:34  [ТС]     Групповая обработка разнотиповых объектов? #4
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Вот так и выкрутиться, как вы написали. Виртуальные функции замедляют каждый вызов функции ровно на одну косвенную адресацию, это нисколечки не страшно.
Все-таки использование динамического полиморфизма мне кажется излишне сложным. Ведь он задумывался как способ выбора функции (из базового или производного класса?) на этапе выполнения программы. А у нас 100% известно, что функция должна использоваться из производного класса.

Думаю лучше в объекте "Manager" создать массивы под каждый тип данных и при добавлении объектов складировать их в соответствующие им массивы. А при массовом выполнении функции "MyFunc" выполнять ее отдельно для каждого массива (объектов одного типа данных).
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.01.2013, 12:48     Групповая обработка разнотиповых объектов? #5
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Все-таки использование динамического полиморфизма мне кажется излишне сложным. Ведь он задумывался как способ выбора функции (из базового или производного класса?) на этапе выполнения программы. А у нас 100% известно, что функция должна использоваться из производного класса.
Для выбора функции одного из производных классов. Того, который на самом деле является производным классом объекта, которым мы оперируем как объектом базового класса.
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Надо написать объект ("Manager"), который будет сохранять набор разнотиповых объектов в себе и потом массово их обрабатывать
У вас вот разнотипные объекты производных классов. И вы ими оперируете как объектами базового класса. Но с одним исключением: при вызове MyFunc() мы должны взять MyFunc() из соответствующего производного класса.

Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Думаю лучше в объекте "Manager" создать массивы под каждый тип данных и при добавлении объектов складировать их в соответствующие им массивы. А при массовом выполнении функции "MyFunc" выполнять ее отдельно для каждого массива (объектов одного типа данных).
Это типа не излише сложно — на каждый производный класс ещё один массив и ещё один метод, чтобы объект добавился в правильный массив? Не слишком ли много геморроя получает менеджер из-за проблем подчинённых массивов? Ведь это их проблема — какую MyFunc() вызвать, лишь бы обработка была правильная.
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
17.01.2013, 13:08  [ТС]     Групповая обработка разнотиповых объектов? #6
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Для выбора функции одного из производных классов. Того, который на самом деле является производным классом объекта, которым мы оперируем как объектом базового класса.
Полностью согласен. Но в моем частном случае вся разница производных классов сводится только к разному типу хранящихся значений. Функция для них написана единая, поэтому выбора как-такового не происходит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 13:14     Групповая обработка разнотиповых объектов?
Еще ссылки по теме:

Обработка двумерных массивов. Обработка матриц C++
C++ Массив объектов
Сортировка объектов C++

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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
17.01.2013, 13:14     Групповая обработка разнотиповых объектов? #7
Вот только, к сожалению, для компилятора MyArray<int> и MyArray<double> — это совершенно разные типы, которые ничего не связывает. У них вполне (технически) могут быть разные поля, разные методы и наследоваться они могут от разных базовых классов.
Yandex
Объявления
17.01.2013, 13:14     Групповая обработка разнотиповых объектов?
Ответ Создать тему
Опции темы

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