Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
#1

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

16.01.2013, 21:27. Просмотров 281. Ответов 6
Метки нет (Все метки)

Есть шаблон исходных объектов:
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"). Но у Страуструпа написано, что абстрактные функции замедляют работу программы. Хотелось бы остаться с хорошей производительностью.

Как выкрутиться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2013, 21:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Групповая обработка разнотиповых объектов? (C++):

В программе реализовать возможность записи объектов в файл и чтения объектов из файла - C++
Добрый день, помогите, пожалуйста! У меня есть программа: #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; class...

групповая обработка документа - 1С
В какой менюшки находиться &quot;групповая обработка документа!?

Групповая обработка данных - Базы данных
Доброго времени суток, форумчане! Нужна помощь. Имеется тема магистерской: &quot;Разработка и оптимизация групповой обработки данных в среде...

1C 8.x Групповая обработка - Объект не найден - 1С
Доброго времени суток. есть проблема - база распределенная, почистили статьи, которые фигурируют в банковских выписках и сделали обмен....

1C 8.x Обработка удаления объектов - 1С
Господа ! День добрый.... Просьба может у кого нибуть есть или кому не сложно по быстрому склепать обробутку удаления объектов игноря все...

Обработка объектов в listview - Программирование Android
Такая проблема... Хочу создать 50 строк в listview, в каждой строке по textview и button. Вопрос в том, как потом обрабатывать эти объекты....

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

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

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

Поочередная обработка нескольких объектов - C++ Linux
Всем доброго времени суток, есть такая проблемма, не могу адаптировать часть кода под с++ с пайтона. Вот код на пайтоне: path =...

Обработка событий для перекрывающихся объектов - JavaScript
Добрый день. Вот такой вот примитивный скрипт который делает плавное выпадение списка. &lt;script type=&quot;text/javascript&quot;&gt; var T1,...

Обработка событий програмно созданных объектов - Lazarus
Есть такой код: unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls,...

Обработка нескольких объектов одним шейдером - OpenGL
Ребята, у меня вопрос моего уровня. Создал свет в шейдере с помощью урока, а как мне этим источником света обработать несколько объектов, а...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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