Здравствуйте, kov_serg, Вы писали:
_>Но в целом название ElementId и LogicalId с реализацие в виде вектора, например у меня вызывают некоторые вопросы.
Это запросто могут быть координаты в многомерном пространстве.
И запросто может быть так, что количество измерений в этом пространстве определяется динамически и неизвестно на этапе компиляции, поэтому и std::vector, а не std::array.
Здравствуйте, so5team, Вы писали:
S>Это запросто могут быть координаты в многомерном пространстве.
Это уже не id а набор признаков
S>И запросто может быть так, что количество измерений в этом пространстве определяется динамически и неизвестно на этапе компиляции, поэтому и std::vector, а не std::array.
Дело не в этом. Id предполагает хотя бы сравнение этих самых id
Здравствуйте, kov_serg, Вы писали:
S>>Это запросто могут быть координаты в многомерном пространстве. _>Это уже не id а набор признаков
В проекте, которому сейчас помогаю, как раз объекты однозначно идентифицируются координатами в N-мерном пространстве. И это именно что полный аналог Id, а не набор признаков.
S>>И запросто может быть так, что количество измерений в этом пространстве определяется динамически и неизвестно на этапе компиляции, поэтому и std::vector, а не std::array.
_>Дело не в этом. Id предполагает хотя бы сравнение этих самых id
Здравствуйте, so5team, Вы писали:
S>Здравствуйте, kov_serg, Вы писали:
_>>Но в целом название ElementId и LogicalId с реализацие в виде вектора, например у меня вызывают некоторые вопросы.
S>Это запросто могут быть координаты в многомерном пространстве. S>И запросто может быть так, что количество измерений в этом пространстве определяется динамически и неизвестно на этапе компиляции, поэтому и std::vector, а не std::array.
ElementId — это уникальный Id элемента иерархии.
LogicalId — тоже Id элемента той же иерархии, но без определенного слоя.
Здравствуйте, so5team, Вы писали:
S>В проекте, которому сейчас помогаю, как раз объекты однозначно идентифицируются координатами в N-мерном пространстве. И это именно что полный аналог Id, а не набор признаков.
Но у вас же, скорее всего, нет ситуации, когда в некотором N-мерном пространстве вместе существуют объекты с N-x и N+y размерностям?
Здравствуйте, DenProg, Вы писали:
DP>ElementId — это уникальный Id элемента иерархии. DP>LogicalId — тоже Id элемента той же иерархии, но без определенного слоя.
ID это число однозначно идентифицирующее что-либо.
А тут это путь к объекту в некоторой иерархии.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, kov_serg, Вы писали:
_>>ID это число однозначно идентифицирующее что-либо.
R>Почему только число? А строка может быть?
Потому что из простых соображений на практике достаточно int32 или int64 для распределённых систем guid(int128)
Здравствуйте, cserg, Вы писали:
C>Здравствуйте, so5team, Вы писали:
S>>В проекте, которому сейчас помогаю, как раз объекты однозначно идентифицируются координатами в N-мерном пространстве. И это именно что полный аналог Id, а не набор признаков. C>Но у вас же, скорее всего, нет ситуации, когда в некотором N-мерном пространстве вместе существуют объекты с N-x и N+y размерностям?
А при чем здесь это? Посыл же был в том, что вектор целых вряд ли может служить в качестве ID. Я привел пример ситуации, когда может.
Касательно предметной области из которой был взят пример, то да, в рамках одного и того же N-мерного пространства не может быть объектов, координаты которых содержат (N-x) или (N+y) значений. Но в самом приложении одновременно существует несколько пространств разных размерностей.
Здравствуйте, kov_serg, Вы писали:
R>>Почему только число? А строка может быть? _>Потому что из простых соображений на практике достаточно int32 или int64 для распределённых систем guid(int128)
И кроме того, подумалось. Ведь главный вопрос этой темы можно было бы без труда переформулировать и для чисел:
typedef int ElementId;
typedef int LogicalId;
void func(ElementId&); // <- ???
Так что, вопрос можно ли использовать вектор для задания ID, или нельзя — это вообще оффтоп в данном случае.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, DenProg, Вы писали:
DP>>ElementId — это уникальный Id элемента иерархии. DP>>LogicalId — тоже Id элемента той же иерархии, но без определенного слоя.
_>ID это число однозначно идентифицирующее что-либо. _>А тут это путь к объекту в некоторой иерархии.
_>std::dict<ID,Path> absolute_paths; _>std::dict<ID,Path> logical_paths; _>std::dict<ID,Path> some_other_paths; _>std::dict<ID,Metadata> some_metadata;
Проблема в названии? У меня это вектор. Слава богу язык этого не запрещает. Про std::dict наверно раньше не слышал.
Здравствуйте, ·, Вы писали:
·>Здравствуйте, rg45, Вы писали:
r>> ·>Не надо так делать. Лучше так: r>> Обоснование будет какое-нибудь? ·>Код проще читать и поддерживать.
r>> ·> // методы, имеющие смысл для id, а не вся простыня вектора r>> А почему ты уверен, что не вся простыня вектора имеет смысл для ID? ·>Потому что ID это (is-a) не вектор.
r>> Если человек выбрал вектор для задания собственных типов, то, возможно, ему и нужна вся "простыня"? ·>Интуитивно уверен, что невозможно в данном случае. Буду рад услышать обоснование нужности, желательно от автора.
Нужны все основные методы вектора. И переопределять их в новом классе смысла нет.
Здравствуйте, DenProg, Вы писали:
DP>Привет. Есть два типа определенные одинаково:
Сейчас это один тип
DP>Возможно ли сделать так, чтобы такое не компилилось, или хотя бы компилилось с предупреждением?
Тут уже посоветовали наследоваться от вектора. Имхо, это плохая идея, так как она может в некоторых местах протечь (где-нибудь перепутать пользовательский тип и сырой вектор — в ту или другую сторону).
Я бы предложил не морочить себе голову, а просто завернуть в структуру.
Пусть даже с публичным полем, — чтобы минимально возиться с вопросами, что надо от вектора, а что не надо. Потом при случае отрефакторить, благо, все точки использования хорошо видны (поиском по имени поля либо кровавым рефакторингом — сделать приватным и смотреть, где компиляция сломалась).
Здравствуйте, DenProg, Вы писали:
DP>Проблема в названии? У меня это вектор. Слава богу язык этого не запрещает. Про std::dict наверно раньше не слышал.
Не заморачивайся это опечатка должно было быть std::map. Я просто обычно его переименовываю в dict