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

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

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

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

12.01.2013, 16:01. Просмотров 892. Ответов 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++ Qt Чем вохможно запустить через c++ qt прогу сторонний exe

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4261 / 2793 / 219
Регистрация: 12.12.2009
Сообщений: 7,120
Записей в блоге: 1
Завершенные тесты: 1
12.01.2013, 16:05     мультиоператор - вохможно ли? #2
А как ты эти 2 опреатора в коде различать хочешь? Всмысле вот пишешь x-> и как комплиятор должен догадаться какой из операторов вызвать?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 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
Форумчанин
Эксперт С++
4261 / 2793 / 219
Регистрация: 12.12.2009
Сообщений: 7,120
Записей в блоге: 1
Завершенные тесты: 1
12.01.2013, 16:26     мультиоператор - вохможно ли? #4
Вообще не совсем понятна конечная цель. Почему бы не задействовать шаблоны? Или полиморфизм?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
12.01.2013, 16:33  [ТС]     мультиоператор - вохможно ли? #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вообще не совсем понятна конечная цель. Почему бы не задействовать шаблоны? Или полиморфизм?
даже не знаю как внедрить(приведёте пример?). смысл в том чтобы сделать максимально удобную обработку даных, без приведениея типов

Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
Почему бы не задействовать шаблоны?
это как в классе vector?
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
12.01.2013, 16:34     мультиоператор - вохможно ли? #6
да, лучше попробуйте описать задачу в целом, может у нее есть более правильное решение.
а то сейчас решение вы себе придумали и столкнулись с проблемами при реализации этого решения.
и на деле может оказатся так, что ваше решение само по себе плохое, даже если вы обошли все
грабли при его реализации.
не очень понятно что значит обработка данных без приведения типов. можете привести код, который вы
хотите видеть в коннечном итоге?
Avazart
7044 / 5221 / 259
Регистрация: 10.12.2010
Сообщений: 22,945
Записей в блоге: 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,587
Записей в блоге: 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
7044 / 5221 / 259
Регистрация: 10.12.2010
Сообщений: 22,945
Записей в блоге: 17
12.01.2013, 17:01     мультиоператор - вохможно ли? #10
Цитата Сообщение от Van111 Посмотреть сообщение
согласен, а как лучше?
Ну так вы до сих пор не сформулировали задачу, что надо ?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 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
7044 / 5221 / 259
Регистрация: 10.12.2010
Сообщений: 22,945
Записей в блоге: 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,587
Записей в блоге: 12
12.01.2013, 17:17  [ТС]     мультиоператор - вохможно ли? #14
Цитата Сообщение от Avazart Посмотреть сообщение
абсолютно одинаковыми полями.
это только стечение обстоятельств, так как первая структура - команда постройки здания (номер типа здания, количество), а вторая - команда постройки склада (уровень, количество), будет ещё штук 5 ,просто хотел ограничится от игровых наворотов дабы быстрее увидеть результат работы
Avazart
7044 / 5221 / 259
Регистрация: 10.12.2010
Сообщений: 22,945
Записей в блоге: 17
12.01.2013, 17:29     мультиоператор - вохможно ли? #15
Если эти типы настолько разные и у них нет "общей базы" с которой в основном и велась бы работа, то и храните их отдельно - в разных контейнерах.

Добавлено через 9 минут
Да и не думаю что структуру с двумя интами стоит выделять динамически и хранить указатели на них в контейнере.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
12.01.2013, 17:35  [ТС]     мультиоператор - вохможно ли? #16
Avazart, тогда подскажите что нужно для хранения минимального слоя моего ии (элементарные команды постройки).
как надо поменять эту структуру?
C++
1
2
3
4
5
struct SAI_commandS
{
    vector <void*> pointer;
    vector <ECommand> command;
};
Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так вы до сих пор не сформулировали задачу, что надо ?
надо представить максимально оптимальную структура для элемента команды. в одну команду всегда входит номер команды , остальные же данные зависят от самой команды
Avazart
7044 / 5221 / 259
Регистрация: 10.12.2010
Сообщений: 22,945
Записей в блоге: 17
12.01.2013, 17:38     мультиоператор - вохможно ли? #17
Цитата Сообщение от Van111 Посмотреть сообщение
для хранения минимального слоя моего ии
А Я е**?

Добавлено через 1 минуту
Цитата Сообщение от Van111 Посмотреть сообщение
надо представить максимально оптимальную структура для элемента команды. в одну команду всегда входит номер команды , + разные данные
Задача до сих пор не сформулирована...
UserAK
73 / 73 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
12.01.2013, 17:52     мультиоператор - вохможно ли? #18
Цитата Сообщение от Van111 Посмотреть сообщение
надо представить максимально оптимальную структура для элемента команды. в одну команду всегда входит номер команды , остальные же данные зависят от самой команды
у Вас итак достаточно оптимально - указатель на что-то содержащее данные и информация для правильной интерпретации указателя. не пойму чего ещё тут можно придумать ))
Avazart
7044 / 5221 / 259
Регистрация: 10.12.2010
Сообщений: 22,945
Записей в блоге: 17
12.01.2013, 17:54     мультиоператор - вохможно ли? #19
Цитата Сообщение от UserAK Посмотреть сообщение
указатель на что-то содержащее данные и информация для правильной интерпретации указателя.
Вот именно что-то ... а что-то это всегда требует знание того к чему его кастовать...
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
12.01.2013, 17:56  [ТС]     мультиоператор - вохможно ли? #20
C++
1
2
3
4
5
6
7
8
9
10
struct SAI_commands
{
    union 
    {
        SAI_BuMa *AI_BuMa;
        SAI_ReBuMa *AI_ReBuMa;
        //...
};
    int typ;
};
вот так всё решилось
Yandex
Объявления
12.01.2013, 17:56     мультиоператор - вохможно ли?
Ответ Создать тему
Опции темы

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