Я пишу библиотеку импорта 3d-активов. (он использует Assimp, кстати). Существует большая сцена, содержащая узлы, содержащие сетки, и каждая сетка содержит материал. Поэтому я создал следующие классы: Scene, Mesh, Material.Класс внутри класса
Только класс сцены должен быть создан и использован кодером, поэтому наиболее разумной задачей было бы объявить Mesh как частный внутри сцены (а также материал как частный внутри Mesh).
Это должно быть хорошо, поскольку только сцена и должна использовать Mesh, но единственная проблема в том, что она просто выглядит ужасно, и мне не удобно кодировать этот путь. (функции, вложенные в классы, вложенные в классы и т. д.)
Мой вопрос в том, есть ли другие подходы к кодированию для достижения моих целей.
Я вообще не фанат 'Friend's, но вы можете сделать' Mesh' конструктор приватным и сделать 'Scene' 'friend', так что ему разрешено создавать экземпляр' Mesh'. – CompuChip
Если можно создать экземпляр «Сцена», как вы можете создать «Mesh» для добавления в «Scene» или «Material» для добавления в 'Mesh', не создавая экземпляр« Mesh »или «Материал» или и то, и другое? Вероятно, было бы лучше, если бы «Сцена» имела некоторые контейнерные методы и позволяла создавать как «Mesh», так и «Material» при необходимости и добавляться в «Сцена», если это необходимо ... – twalberg
@twalberg Сцена получает с файлом импорта. Его ответственность состоит в том, чтобы получить все 3D-данные в память, и для этого используется Mesh и Material. Пользователь не должен заботиться о сетке и материале. – Pilpel