Я просто столкнулся с проблемой нарезки и тут же приземлился. Итак, позвольте мне добавить мои два цента к этому.
Приведем пример из «производственного кода» (или что-то вроде близкого):
Допустим, у нас есть то, что рассылает действия. Например, пользовательский интерфейс центра управления. Этот пользовательский интерфейс должен получить список вещей, которые в настоящее время могут быть отправлены. Поэтому мы определяем класс, содержащий информацию о доставке. Назовем это Action
. Таким образом, Action
имеет некоторые переменные-члены. Для простоты мы имеем только 2, являющиеся std::string name
и a std::function<void()> f
. Затем он имеет void activate()
, который просто выполняет член f
.
Таким образом, пользовательский интерфейс получает std::vector<Action>
. Представьте себе некоторые функции, такие как:
void push_back(Action toAdd);
Теперь мы установили, как это выглядит с точки зрения пользовательского интерфейса. Пока нет проблем. Но какой-то другой парень, который работает над этим проектом, внезапно решает, что существуют специальные действия, требующие дополнительной информации в объекте Action
. По какой причине. Это также можно решить с помощью лямбда-захватов. Этот пример не принимается 1-1 из кода.
Итак, парень происходит от Action
, чтобы добавить свой собственный вкус. Он передает экземпляр своего урожая в класс push_back
, но затем программа переходит в haywire.
Итак, что случилось? Как вы могли предположить : объект был отрезан.
Дополнительная информация из экземпляра потеряна, а f
теперь подвержен неопределенному поведению.
Надеюсь, что в этом примере рассказывается о тех людях, которые не могут себе представить, когда говорят о A
s и B
в какой-то мере.
Как мы уже обсуждали в другом потоке, этот метод доступен только после загрузки геометрических данных модели - зритель должен сказать, подходит ли модель для перечисления фрагментов узла, прежде чем он предоставит метод:
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT,()=> viewer.model.getData().instanceTree.enumNodeFragments(dbid, fragId => console.log(fragId)))
См живой код здесь .