290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
1

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

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

Author24 — интернет-сервис помощи студентам
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. как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2013, 16:01
Ответы с готовыми решениями:

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


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

Или воспользуйтесь поиском по форуму:
32
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
12.01.2013, 16:05 2
А как ты эти 2 опреатора в коде различать хочешь? Всмысле вот пишешь x-> и как комплиятор должен догадаться какой из операторов вызвать?
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 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;}
//....
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
12.01.2013, 16:26 4
Вообще не совсем понятна конечная цель. Почему бы не задействовать шаблоны? Или полиморфизм?
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
12.01.2013, 16:33  [ТС] 5
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вообще не совсем понятна конечная цель. Почему бы не задействовать шаблоны? Или полиморфизм?
даже не знаю как внедрить(приведёте пример?). смысл в том чтобы сделать максимально удобную обработку даных, без приведениея типов

Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
Почему бы не задействовать шаблоны?
это как в классе vector?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
12.01.2013, 16:34 6
да, лучше попробуйте описать задачу в целом, может у нее есть более правильное решение.
а то сейчас решение вы себе придумали и столкнулись с проблемами при реализации этого решения.
и на деле может оказатся так, что ваше решение само по себе плохое, даже если вы обошли все
грабли при его реализации.
не очень понятно что значит обработка данных без приведения типов. можете привести код, который вы
хотите видеть в коннечном итоге?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2013, 16:47 7
C++
1
vector <void*> pointer;
Конструкция с void* сама по себе стрЁмная.
0
73 / 73 / 13
Регистрация: 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;
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 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* сама по себе стрЁмная.
согласен, а как лучше?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2013, 17:01 10
Цитата Сообщение от Van111 Посмотреть сообщение
согласен, а как лучше?
Ну так вы до сих пор не сформулировали задачу, что надо ?
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
12.01.2013, 17:05  [ТС] 11
Цитата Сообщение от UserAK Посмотреть сообщение
union void_x{
* * * * void * x;
* * * * SAI_ReBuMa * SAI_ReBuMa;
* * * * SAI_BuMa * SAI_BuMa;
* * } x;
спасибо, скорее всего это лучший вариант
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
12.01.2013, 17:09 12
Van111, сомневаюсь.
Насколько разнятся данные? на данный момент всё хорошо решается через полиморфизм
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
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;
};
Базовый класс добавь и наследуй от него эти два класса...

Хотя тоже непонятно из каких соображений появились эти два класса при чем с абсолютно одинаковыми полями.
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
12.01.2013, 17:17  [ТС] 14
Цитата Сообщение от Avazart Посмотреть сообщение
абсолютно одинаковыми полями.
это только стечение обстоятельств, так как первая структура - команда постройки здания (номер типа здания, количество), а вторая - команда постройки склада (уровень, количество), будет ещё штук 5 ,просто хотел ограничится от игровых наворотов дабы быстрее увидеть результат работы
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2013, 17:29 15
Если эти типы настолько разные и у них нет "общей базы" с которой в основном и велась бы работа, то и храните их отдельно - в разных контейнерах.

Добавлено через 9 минут
Да и не думаю что структуру с двумя интами стоит выделять динамически и хранить указатели на них в контейнере.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 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 Посмотреть сообщение
Ну так вы до сих пор не сформулировали задачу, что надо ?
надо представить максимально оптимальную структура для элемента команды. в одну команду всегда входит номер команды , остальные же данные зависят от самой команды
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2013, 17:38 17
Цитата Сообщение от Van111 Посмотреть сообщение
для хранения минимального слоя моего ии
А Я е**?

Добавлено через 1 минуту
Цитата Сообщение от Van111 Посмотреть сообщение
надо представить максимально оптимальную структура для элемента команды. в одну команду всегда входит номер команды , + разные данные
Задача до сих пор не сформулирована...
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
12.01.2013, 17:52 18
Цитата Сообщение от Van111 Посмотреть сообщение
надо представить максимально оптимальную структура для элемента команды. в одну команду всегда входит номер команды , остальные же данные зависят от самой команды
у Вас итак достаточно оптимально - указатель на что-то содержащее данные и информация для правильной интерпретации указателя. не пойму чего ещё тут можно придумать ))
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2013, 17:54 19
Цитата Сообщение от UserAK Посмотреть сообщение
указатель на что-то содержащее данные и информация для правильной интерпретации указателя.
Вот именно что-то ... а что-то это всегда требует знание того к чему его кастовать...
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 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;
};
вот так всё решилось
0
12.01.2013, 17:56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru