Войти
ФлеймФорумПрограммирование

Общие вопросы по программированию (301 стр)

Страницы: 1300 301 302 303314 Следующая »
#4500
13:08, 13 мая 2021

Kartonagnick
Ну допустим есть на руках интерфейс:

// game_object.h
struct game_object_t;

const string_t* name(const game_object_t* obj);
game_object_type_t type(const game_object_t* obj);
...

// critter.h

struct critter_t : game_object_t;

critter_t* new_critter(...);
void free_critter(critter_t* critter);

// item.h

struct item_t : game_object_t;

item_t* new_item(...);
void free_item(item_t* item);

// main.cpp
critter_t* critter = new_critter(...);
item_t* item = new_item(...);
print(name(critter), type(critter));
print(name(item), type(item));

При этом вся имплементация лежит в либе.


#4501
13:22, 13 мая 2021

nes
> Ну допустим есть на руках интерфейс:
предлагаешь мне телепатически догадаццо: кто кого инклюдит?

или может быть всё таки оформишь пример-иллюстрацию по-человечески?

nes
> При этом вся имплементация лежит в либе.

ты осознаешь принципиальное различие между понятиями:
- forward class declaration
- class declaration
- class implementation

?

#4502
13:35, 13 мая 2021

Kartonagnick
>предлагаешь мне телепатически догадаццо: кто кого инклюдит?
Думал очевидно.
critter_t и item_t наследются от game_object_t, соответственно в либе,
в critter.cpp и в item.cpp будет включен game_object.h

> ты осознаешь принципиальное различие между понятиями:
forward class declaration - предварительное объявление класса:

class some_shit_t;

class declaration - объявление класса:

class some_shit_t {
  void some_method1();
  void some_method2();
  ...
};

class implementation - реализация класса:

void some_shit_t::some_method1() {
   ...
}

void some_shit_t::some_method2() {
   ...
}

#4503
14:26, 13 мая 2021

nes
> Думал очевидно.

+ Показать
#4504
14:27, 13 мая 2021

nes
Нахрена тебе вся эта фигня? Ты для екс собрался компоненты по указателям на куче хранить что ли?

#4505
15:31, 13 мая 2021

Vlad2001_MFS
Указатели это по сути id, выдаваемые юзеру на руки.

#4506
17:09, 13 мая 2021

nes
> Указатели это по сути id, выдаваемые юзеру на руки.
Если это ID, то это и должен быть ID. А в случае ECS - id + generation. Указатель - это как бы из другой оперы немного.
У тебя это указатели на что в контексте ECS? Компоненты? Сущности? Хотя в любом случае фигня выходит.

#4507
11:42, 14 мая 2021

Vlad2001_MFS
>Если это ID, то это и должен быть ID
Чем указатель тебе не ойди?

>А в случае ECS - id + generation
Сильно самонадуманно.

>У тебя это указатели на что в контексте ECS? Компоненты? Сущности?
Стало быть компоненты и не только.

#4508
12:02, 14 мая 2021

nes
ты когда удалишь компонент и создашь новый, у тебя их id будут совпадать, что является некорректностью

#4509
12:04, 14 мая 2021

BingoBongo
>ты когда удалишь компонент и создашь новый, у тебя их id будут совпадать
Не обязательно.

>что является некорректностью
Почему?

#4510
(Правка: 12:46) 12:44, 14 мая 2021

nes
> Не обязательно.
если id - это адрес памяти, то новые объекты будут размещены по старым адресам же

> Почему?
потому что часто бывает когда компоненты хранятся по указателю в других объектах, и вероятна ситуация, когда компонент был создан, указатель на него инициализирован, а сам компонент потом удален и потому же адресу был создан другой. но тот кто хранит указатель даже не поймет и никак не проверит, что по факту он указывает уже на новый компонент. или например, ты сохраняешь id-шники монстров, которые были убиты на уровне, а потом при загрузки локации из сохранения тупо грузишь исходную карту, но удаляешь монстров по этим айдишникам. но если айдишник не уникален во времени, то это уже не будет работать.

#4511
12:56, 14 мая 2021

BingoBongo
>если id - это адрес памяти, то новые объекты будут размещены по старым адресам же
Все относительно.

>потому что часто бывает когда компоненты хранятся по указателю в других объектах, и вероятна ситуация, когда компонент был создан, указатель на него инициализирован, а >сам компонент потом удален и потому же адресу был создан другой.
Это уже проблема имплементации, которая может быть, а может и не быть.
Эти проблемы ни как не зависят от того используешь ты числовой ID, указатель, или что-то еще.

#4512
13:01, 14 мая 2021

nes
id отличается от указателя тем, что по id можно определить (при соответствующей реализации), жив объект, на который он указывает, или нет. а по указателю ты должен следить за его временем жизни сам.

#4513
(Правка: 13:21) 13:20, 14 мая 2021

nes
почему бы не сделать definition derived_t видимым из места вызова foo?  какие проблемы это вызывает?

#4514
13:21, 14 мая 2021

Suslik
По указателю тоже можно, при должной сноровке.

Страницы: 1300 301 302 303314 Следующая »
ФлеймФорумПрограммирование