Как вернуть enum struct из другого enum struct?

iLoco

А печеньки будут :?
Меценат
Сообщения
2,039
Реакции
1,020
Как вернуть один enum struct из другого enum struct?
unknown-1.png
 
Последнее редактирование модератором:

JDW

Мы открываем бизнес
Сообщения
344
Реакции
291
Никак, так как это синтаксический сахар
 

Kruzya

Raspberry Pi 4
Команда форума
Меценат
Сообщения
10,550
Реакции
8,726
По ссылке я бы попробовал.
Структуры ж по сути - это массив. Массивы ходят ссылками по-умолчанию. Можно создать структуру в скоупе вызова, и передать ссылку на неё в метод своей структуры, и там уже напрямую в неё и писать.
 

iLoco

А печеньки будут :?
Меценат
Сообщения
2,039
Реакции
1,020
По ссылке я бы попробовал.
Структуры ж по сути - это массив. Массивы ходят ссылками по-умолчанию. Можно создать структуру в скоупе вызова, и передать ссылку на неё в метод своей структуры, и там уже напрямую в неё и писать.
Не совсем понимаю что такое это ваша ссылка
 

Faya™

Жуестер
Меценат
Сообщения
765
Реакции
358
Попробуй так что ли, но как по мне можно и лучше (если вообще работает)
C++:
enum stuct MC_PluginId
{
    // ...

    void Item(char[] item_unique, MC_Item item, int length)
    {
        this.ItemMap.GetArray(item_unique, item, length);
    }
}
 

Kruzya

Raspberry Pi 4
Команда форума
Меценат
Сообщения
10,550
Реакции
8,726
@iLoco, в обычных методах аргумент помечается ссылкой путём написания амперсанда прямо перед названием переменной.
Но т.к. структура - синтаксический сахар над массивами, можно просто добавить аргумент под структуру, и в него и писать:
C-подобный:
enum struct MC_Item
{
    Function CB_OnDisplay;
    Function CB_OnPreview;

    int en_test;
}

enum struct MC_PluginId
{
    Handle plugin;
    Cookie cookie;
    Function CB_OnDisplay;
    int cores_blacklist;

    MC_Item Items;

    ArrayList ArItems;
    StringMap ItemsMap;

    bool Item(char[] item_unique, MC_Item item)
    {
        return this.ItemsMap.GetArray(item_unique, item, sizeof(item));
    }
}

В этом примере кода, MC_PluginId.Item возвращает бул об успешности получения структуры и записывает её в item.
C-подобный:
MC_Item item;
if (mcPlugin.Item("unique...", item))
{
    // Элемент получили
}

Не проверял.
 

Rostu

Меценат
Сообщения
1,001
Реакции
627
Необходимую структуру которую необходимо заполнить - передаешь качестве аргумента

C-подобный:
enum struct BeamVec
{
    float x;
    float y;
    float z;

    void Init(float _x, float _y, float _z)
    {
        this.x = _x;
        this.y = _y;
        this.z = _z;
    }
}

enum struct Beams
{
    BeamVec from;
    BeamVec to;

    bool GetBeamFrom(BeamVec result)
    {
        result = this.from;

        return true;
    }
}
public void OnPluginStart()
{
    BeamVec first;
    BeamVec Temp;
    first.Init(2.2, 3.4, 66.6);
    Temp.Init(4.4, 4.4, 4.4);


    Beams beam;
    beam.from = first;
    // Манипуляция тем что НУЖНО ПОЛУЧИТЬ

    BeamVec second;
    beam.GetBeamFrom(second);

    second.y = 99.9;

    PrintToServer("[1] First [%.2f][%.2f][%.2f] Second [%.2f][%.2f][%.2f]", beam.from.x, beam.from.y, beam.from.z, second.x, second.y, second.z);

    beam.from = Temp;

    PrintToServer("[2] First [%.2f][%.2f][%.2f] Second [%.2f][%.2f][%.2f]", beam.from.x, beam.from.y, beam.from.z, second.x, second.y, second.z);
}
1617881784196.png

P.S Написал в одну минуту с крузей - его решение верно, именно так в enum struct и решается данная проблема
 

iLoco

А печеньки будут :?
Меценат
Сообщения
2,039
Реакции
1,020
@Kruzya, @Rostu, мне бы так, что бы сразу можно было обратится к елементу дочернего массива (MC_Item), что бы не писать карту как с обращениями ко всем функциям.
C-подобный:
plugin_id.Item("test item").CB_OnPreview
(проверять наличие такого предмета не нужно мне, это заранее делается, до получается enum struct предмета)
 

Kruzya

Raspberry Pi 4
Команда форума
Меценат
Сообщения
10,550
Реакции
8,726
@iLoco, никак. Структуры, как выше @JDW и сказал - это сахар над массивами синтаксический. Вы же не можете просто так взять и вернуть массив любой функцией? Вот тут те же правила.
Можете разве что макросами извернуться.
 
  • Мне нравится
Реакции: JDW
Сверху