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

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

Войти
Регистрация
Восстановить пароль
 
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
#1

мультиоператор - вохможно ли? - C++

12.01.2013, 16:01. Просмотров 962. Ответов 32
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct SAI_BuMa
{
    int number_BuMa;
    int counter_BuMa;
};
struct SAI_ReBuMa
{
    int level_ReBuMa;
    int counter_ReBuMa;
};
struct pointer_command
{
protected:
    void * x;
public:
    inline void operator = (void * y ) {x = y;}
    operator void* () const { return x; }
    template <class Type> 
    void operator= (Type a) const {  x = new char[sizeof(a)] memcpy(x, *a, [sizeof(a)]); }
    SAI_BuMa * operator-> ();// const {return  (SAI_BuMa*)x;}
    SAI_ReBuMa * operator-> ();// const {return  (SAI_ReBuMa*)x;} // тут выскакивает ошибка о переопределении 
 
};
C++
1
pointer_command x;
у меня задача - сделать так чтоб при написании x-> можно было обратится и к данным структуры SAI_BuMa и к данным структуры SAI_ReBuMa. как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 16:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос мультиоператор - вохможно ли? (C++):

Чем вохможно запустить через c++ qt прогу сторонний exe - C++ Qt
Например exe от проги на c#


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

Или воспользуйтесь поиском по форуму:
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.01.2013, 16:05 #2
А как ты эти 2 опреатора в коде различать хочешь? Всмысле вот пишешь x-> и как комплиятор должен догадаться какой из операторов вызвать?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
12.01.2013, 16:19  [ТС] #3
а как поступить если есть
C++
1
2
3
4
5
struct SAI_command
{
    vector <void*> pointer;
    vector <ECommand> command;
};
собсвенно command - сама команда, pointer - указатель на данные этой команды.
лично мне кажется что всё время перед pointer писать неявное преобразование к SAI_BuMa*, SAI_ReBuMa* и т д - не лучший выход

Добавлено через 7 минут
возникла мысль, но правильна ли она? написать функции возврата всех значений , например:
C++
1
2
3
SAI_BuMa * retSAI_BuMa () {return (SAI_BuMa*)x;}
SAI_ReBuMa * retSAI_ReBuMa() {return (SAI_ReBuMa*)x;}
//....
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.01.2013, 16:26 #4
Вообще не совсем понятна конечная цель. Почему бы не задействовать шаблоны? Или полиморфизм?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
12.01.2013, 16:33  [ТС] #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вообще не совсем понятна конечная цель. Почему бы не задействовать шаблоны? Или полиморфизм?
даже не знаю как внедрить(приведёте пример?). смысл в том чтобы сделать максимально удобную обработку даных, без приведениея типов

Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
Почему бы не задействовать шаблоны?
это как в классе vector?
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
12.01.2013, 16:34 #6
да, лучше попробуйте описать задачу в целом, может у нее есть более правильное решение.
а то сейчас решение вы себе придумали и столкнулись с проблемами при реализации этого решения.
и на деле может оказатся так, что ваше решение само по себе плохое, даже если вы обошли все
грабли при его реализации.
не очень понятно что значит обработка данных без приведения типов. можете привести код, который вы
хотите видеть в коннечном итоге?
Avazart
Эксперт С++
7145 / 5322 / 276
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 17
12.01.2013, 16:47 #7
C++
1
vector <void*> pointer;
Конструкция с void* сама по себе стрЁмная.
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
12.01.2013, 16:50 #8
а объединить их нельзя?
C++
1
2
3
4
5
    union void_x{
        void * x;
        SAI_ReBuMa * SAI_ReBuMa;
        SAI_BuMa * SAI_BuMa;
    } x;
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
12.01.2013, 17:00  [ТС] #9
Цитата Сообщение от DU Посмотреть сообщение
да, лучше попробуйте описать задачу в целом, может у нее есть более правильное решение.
а то сейчас решение вы себе придумали и столкнулись с проблемами при реализации этого решения.
и на деле может оказатся так, что ваше решение само по себе плохое, даже если вы обошли все
грабли при его реализации.
не очень понятно что значит обработка данных без приведения типов. можете привести код, который вы
хотите видеть в коннечном итоге?
задача в целом - игра. искуственный интелект работает по шаблону. структура шаблона многослойна(характеры-уровени-команды)
слой команды я представил как
C++
1
2
3
4
5
struct SAI_command
{
    vector <void*> pointer;
    vector <ECommand> command;
};
pointer может указывать на данные любого типа , этот тип находится в переменной command , которая имеет тип enum. вот мне надо получать доступ к данным структуры на которую указывает pointer. ,без приведения типов не обошлось, но мне это не очень нравится

Добавлено через 53 секунды
Цитата Сообщение от Avazart Посмотреть сообщение
Конструкция с void* сама по себе стрЁмная.
согласен, а как лучше?
Avazart
Эксперт С++
7145 / 5322 / 276
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 17
12.01.2013, 17:01 #10
Цитата Сообщение от Van111 Посмотреть сообщение
согласен, а как лучше?
Ну так вы до сих пор не сформулировали задачу, что надо ?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
12.01.2013, 17:05  [ТС] #11
Цитата Сообщение от UserAK Посмотреть сообщение
union void_x{
* * * * void * x;
* * * * SAI_ReBuMa * SAI_ReBuMa;
* * * * SAI_BuMa * SAI_BuMa;
* * } x;
спасибо, скорее всего это лучший вариант
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
12.01.2013, 17:09 #12
Van111, сомневаюсь.
Насколько разнятся данные? на данный момент всё хорошо решается через полиморфизм
Avazart
Эксперт С++
7145 / 5322 / 276
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 17
12.01.2013, 17:11 #13
C++
1
2
3
4
5
6
7
8
9
10
struct SAI_BuMa
{
    int number_BuMa;
    int counter_BuMa;
};
struct SAI_ReBuMa
{
    int level_ReBuMa;
    int counter_ReBuMa;
};
Базовый класс добавь и наследуй от него эти два класса...

Хотя тоже непонятно из каких соображений появились эти два класса при чем с абсолютно одинаковыми полями.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
12.01.2013, 17:17  [ТС] #14
Цитата Сообщение от Avazart Посмотреть сообщение
абсолютно одинаковыми полями.
это только стечение обстоятельств, так как первая структура - команда постройки здания (номер типа здания, количество), а вторая - команда постройки склада (уровень, количество), будет ещё штук 5 ,просто хотел ограничится от игровых наворотов дабы быстрее увидеть результат работы
Avazart
Эксперт С++
7145 / 5322 / 276
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 17
12.01.2013, 17:29 #15
Если эти типы настолько разные и у них нет "общей базы" с которой в основном и велась бы работа, то и храните их отдельно - в разных контейнерах.

Добавлено через 9 минут
Да и не думаю что структуру с двумя интами стоит выделять динамически и хранить указатели на них в контейнере.
Yandex
Объявления
12.01.2013, 17:29
Ответ Создать тему
Опции темы

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