Re[6]: Два одинаковых типа
От: so5team https://stiffstream.com
Дата: 22.12.24 12:17
Оценка: +2
Здравствуйте, kov_serg, Вы писали:

S>>Это запросто могут быть координаты в многомерном пространстве.

_>Это уже не id а набор признаков

В проекте, которому сейчас помогаю, как раз объекты однозначно идентифицируются координатами в N-мерном пространстве. И это именно что полный аналог Id, а не набор признаков.

S>>И запросто может быть так, что количество измерений в этом пространстве определяется динамически и неизвестно на этапе компиляции, поэтому и std::vector, а не std::array.


_>Дело не в этом. Id предполагает хотя бы сравнение этих самых id


Если вы не в курсе, то для std::vector определены операторы сравнения: https://en.cppreference.com/w/cpp/container/vector (раздел Non-member functions).
Re: Два одинаковых типа
От: kov_serg Россия  
Дата: 20.12.24 17:40
Оценка: 3 (1)
Здравствуйте, DenProg, Вы писали:

DP>Возможно ли сделать так, чтобы такое не компилилось, или хотя бы компилилось с предупреждением?

typedef struct ElementId : std::vector<int> {};
typedef struct LogicalId : std::vector<int> {};
?
Re[2]: Два одинаковых типа
От: rg45 СССР  
Дата: 21.12.24 12:57
Оценка: 1 (1)
Здравствуйте, ·, Вы писали:

·>Не надо так делать. Лучше так:


Обоснование будет какое-нибудь?

·> // методы, имеющие смысл для id, а не вся простыня вектора


А почему ты уверен, что не вся простыня вектора имеет смысл для ID? Если человек выбрал вектор для задания собственных типов, то, возможно, ему и нужна вся "простыня"?
--
Справедливость выше закона. А человечность выше справедливости.
Re: Два одинаковых типа
От: Кодт Россия  
Дата: 23.12.24 10:30
Оценка: 1 (1)
Здравствуйте, DenProg, Вы писали:

DP>Привет. Есть два типа определенные одинаково:


Сейчас это один тип

DP>Возможно ли сделать так, чтобы такое не компилилось, или хотя бы компилилось с предупреждением?


Тут уже посоветовали наследоваться от вектора. Имхо, это плохая идея, так как она может в некоторых местах протечь (где-нибудь перепутать пользовательский тип и сырой вектор — в ту или другую сторону).

Я бы предложил не морочить себе голову, а просто завернуть в структуру.
Пусть даже с публичным полем, — чтобы минимально возиться с вопросами, что надо от вектора, а что не надо. Потом при случае отрефакторить, благо, все точки использования хорошо видны (поиском по имени поля либо кровавым рефакторингом — сделать приватным и смотреть, где компиляция сломалась).

using IntVec = std::vector<int>;

struct ElementId { IntVec data; };
struct LogicalId { IntVec data; };


Код становится громоздче на несколько символов, кажется, не жалко. Зато читаемость повышается.
void func(ElementId id) {
  ..... for (int i: id.data) .....
  ..... id.data[0] .....
  ..... std::size(id.data) .....
}

.... func(ElementId{.data = {1,2,3,4,5}} .....

Поля одноимённые или разноимённые в зависимости от того, есть ли какой-нибудь шаблонный код или хочется добавить паранойи.
Перекуём баги на фичи!
Re: Два одинаковых типа
От: wander  
Дата: 20.12.24 17:42
Оценка: +1
Здравствуйте, DenProg, Вы писали:

DP>Привет. Есть два типа определенные одинаково:

DP>
DP>typedef std::vector<int> ElementId;
DP>typedef std::vector<int> LogicalId;
DP>

.....
DP>Возможно ли сделать так, чтобы такое не компилилось, или хотя бы компилилось с предупреждением?

Ы?
https://www.boost.org/doc/libs/1_61_0/libs/serialization/doc/strong_typedef.html
Re: Два одинаковых типа
От: · Великобритания  
Дата: 21.12.24 12:38
Оценка: +1
Здравствуйте, DenProg, Вы писали:

DP> Привет. Есть два типа определенные одинаково:

DP>
DP> typedef std::vector<int> ElementId;
DP> typedef std::vector<int> LogicalId;
DP>

Не надо так делать. Лучше так:
class ElementId
{
private: 
   std::vector<int> value;
public:
   // методы, имеющие смысл для id, а не вся простыня вектора
}
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Два одинаковых типа
От: kov_serg Россия  
Дата: 21.12.24 16:19
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>Ну так, тебе ни что не мешает задать эти вопросы автору.


Не. думаю не стоит
Re[9]: Два одинаковых типа
От: rg45 СССР  
Дата: 22.12.24 17:55
Оценка: :)
Здравствуйте, kov_serg, Вы писали:

R>>Почему только число? А строка может быть?

_>Потому что из простых соображений на практике достаточно int32 или int64 для распределённых систем guid(int128)

И кроме того, подумалось. Ведь главный вопрос этой темы можно было бы без труда переформулировать и для чисел:

typedef int ElementId;
typedef int LogicalId;

void func(ElementId&); // <- ???


Так что, вопрос можно ли использовать вектор для задания ID, или нельзя — это вообще оффтоп в данном случае.
--
Справедливость выше закона. А человечность выше справедливости.
Re[10]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 10:40
Оценка: +1
Здравствуйте, rg45, Вы писали:

R>И кроме того, подумалось. Ведь главный вопрос этой темы можно было бы без труда переформулировать и для чисел:

R>
R>typedef int ElementId;
R>typedef int LogicalId;

R>void func(ElementId&); // <- ???
R>


R>Так что, вопрос можно ли использовать вектор для задания ID, или нельзя — это вообще оффтоп в данном случае.


Прикалываетесь?
typedef int ID;
struct ElementId { ID value; };
struct LogicalId { ID value; };
Re[26]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 13:29
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>Вместо этого ты решил повыносить мозг мне


да
Два одинаковых типа
От: DenProg  
Дата: 20.12.24 17:35
Оценка:
Привет. Есть два типа определенные одинаково:
typedef std::vector<int> ElementId;
typedef std::vector<int> LogicalId;

Есть функция, принимающая один из них:
void func(ElementId& id)
{
}

Получается что такой вызов прокатывает без предупреждения:
LogicalId logical_id;
func(logical_id);

Возможно ли сделать так, чтобы такое не компилилось, или хотя бы компилилось с предупреждением?
Re[2]: Два одинаковых типа
От: rg45 СССР  
Дата: 21.12.24 11:45
Оценка:
Здравствуйте, kov_serg, Вы писали:

DP>>Возможно ли сделать так, чтобы такое не компилилось, или хотя бы компилилось с предупреждением?

_>
_>typedef struct ElementId : std::vector<int> {};
_>typedef struct LogicalId : std::vector<int> {};
_>
?


А чтобы эти можно было ещё и пользоваться, нелишним будет открыть доступ к конструкторам базового класса. И typedef здесь избыточен:

struct ElementId : std::vector<int> {using vector::vector;};
struct LogicalId : std::vector<int> {using vector::vector;};
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Два одинаковых типа
От: kov_serg Россия  
Дата: 21.12.24 15:40
Оценка:
Здравствуйте, rg45, Вы писали:


R>А чтобы эти можно было ещё и пользоваться, нелишним будет открыть доступ к конструкторам базового класса. И typedef здесь избыточен:


R>
R>struct ElementId : std::vector<int> {using vector::vector;};
R>struct LogicalId : std::vector<int> {using vector::vector;};
R>


Да вы правы typedef избыточен, я просто скопировал из вопроса
Но в целом название ElementId и LogicalId с реализацие в виде вектора, например у меня вызывают некоторые вопросы.
Re[4]: Два одинаковых типа
От: rg45 СССР  
Дата: 21.12.24 15:42
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Но в целом название ElementId и LogicalId с реализацие в виде вектора, например у меня вызывают некоторые вопросы.


Ну так, тебе ни что не мешает задать эти вопросы автору.
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Два одинаковых типа
От: · Великобритания  
Дата: 21.12.24 17:24
Оценка:
Здравствуйте, rg45, Вы писали:

r> ·>Не надо так делать. Лучше так:

r> Обоснование будет какое-нибудь?
Код проще читать и поддерживать.

r> ·> // методы, имеющие смысл для id, а не вся простыня вектора

r> А почему ты уверен, что не вся простыня вектора имеет смысл для ID?
Потому что ID это (is-a) не вектор.

r> Если человек выбрал вектор для задания собственных типов, то, возможно, ему и нужна вся "простыня"?

Интуитивно уверен, что невозможно в данном случае. Буду рад услышать обоснование нужности, желательно от автора.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Два одинаковых типа
От: rg45 СССР  
Дата: 21.12.24 17:29
Оценка:
Здравствуйте, ·, Вы писали:

r>> Обоснование будет какое-нибудь?

·>Код проще читать и поддерживать.

Ты про какой код? Любой, или конткретный?

r>> А почему ты уверен, что не вся простыня вектора имеет смысл для ID?

·>Потому что ID это (is-a) не вектор.

Откуда ты знаешь, что у него за ID? Он мог бы заменить оригинальные имена на безликие Foo и Bar. К чему бы ты тогда придрался?

·>Интуитивно уверен, что невозможно в данном случае. Буду рад услышать обоснование нужности, желательно от автора.


Обоснования делает тот, кто делает утверждения. Так заведено.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 21.12.2024 18:22 rg45 . Предыдущая версия .
Re[4]: Два одинаковых типа
От: rg45 СССР  
Дата: 21.12.24 17:52
Оценка:
Здравствуйте, ·, Вы писали:

r>> А почему ты уверен, что не вся простыня вектора имеет смысл для ID?

·>Потому что ID это (is-a) не вектор.

А если он напишет так:

class ElementId
{
private: 
   typedef std::vector<int> Value;
   Value value;
public:
   // методы, имеющие смысл для id, а не вся простыня вектора
};


У тебя тоже возникнут замечания?
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 21.12.2024 18:10 rg45 . Предыдущая версия . Еще …
Отредактировано 21.12.2024 18:07 rg45 . Предыдущая версия .
Re[5]: Два одинаковых типа
От: · Великобритания  
Дата: 21.12.24 19:22
Оценка:
Здравствуйте, rg45, Вы писали:

r>>> Обоснование будет какое-нибудь?

R>·>Код проще читать и поддерживать.
R>Ты про какой код? Любой, или конткретный?
Конкретный, конечно. Любой код можно писать любым способом.

r>>> А почему ты уверен, что не вся простыня вектора имеет смысл для ID?

R>·>Потому что ID это (is-a) не вектор.
R>Откуда ты знаешь, что у него за ID? Он мог бы
Тогда бы это бы был бы другой вопрос бы. И я бы отвечал бы по-другому бы.

R>·>Интуитивно уверен, что невозможно в данном случае. Буду рад услышать обоснование нужности, желательно от автора.

R>Обоснования делает тот, кто делает утверждения.
Судя по именам, это какая то конкретная предметная область, а значит это бизнес сущности, публичный интерфейс которых задаётся бизнес-требованиями, а не Стандартной библиотекой.

R>Так заведено.

Ещё в форумах заведено рассказывать о решаемой задаче, а не спрашивать почему выбранное решение не работает.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Два одинаковых типа
От: · Великобритания  
Дата: 21.12.24 19:23
Оценка:
Здравствуйте, rg45, Вы писали:

R>·>Потому что ID это (is-a) не вектор.

R>А если он напишет так:
R>...
R>У тебя тоже возникнут замечания?
Ок. А чем это принципиально отличается от моего?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: Два одинаковых типа
От: rg45 СССР  
Дата: 21.12.24 20:27
Оценка:
Здравствуйте, ·, Вы писали:

R>>У тебя тоже возникнут замечания?

·>Ок. А чем это принципиально отличается от моего?

Так это к тебе вопрос. Видишь ли ты здесь принципиальные отличия от своего варианта и есть ли у тебя какие-либо замечания?
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: Два одинаковых типа
От: rg45 СССР  
Дата: 21.12.24 20:42
Оценка:
Здравствуйте, ·, Вы писали:

R>>Ты про какой код? Любой, или конткретный?

·>Конкретный, конечно. Любой код можно писать любым способом.

Похоже, ты знаешь больше деталей. Ну, так расскажи тогда, почему именно в этом конкретном случае "так делать не надо".

R>>Откуда ты знаешь, что у него за ID? Он мог бы

·>Тогда бы это бы был бы другой вопрос бы. И я бы отвечал бы по-другому бы.
·>Судя по именам, это какая то конкретная предметная область, а значит это бизнес сущности, публичный интерфейс которых задаётся бизнес-требованиями, а не Стандартной библиотекой.

То есть, ты по одним только именам реконструировал полную семантику типов и требования к ним. Ну, круто. Все экстрасенсы мира завидуют.

R>>Так заведено.

·>Ещё в форумах заведено рассказывать о решаемой задаче, а не спрашивать почему выбранное решение не работает.

То есть, если какой-то новичок в форуме допускает какую-то погрешность, это сразу даёт тебе повод говорить что попало?
--
Справедливость выше закона. А человечность выше справедливости.
Re[7]: Два одинаковых типа
От: · Великобритания  
Дата: 21.12.24 23:18
Оценка:
Здравствуйте, rg45, Вы писали:

r> ·>Конкретный, конечно. Любой код можно писать любым способом.

r> Похоже, ты знаешь больше деталей. Ну, так расскажи тогда, почему именно в этом конкретном случае "так делать не надо".
Я рассказал выше.

r> То есть, ты по одним только именам реконструировал полную семантику типов и требования к ним. Ну, круто. Все экстрасенсы мира завидуют.

Не экстрасенс, а опыт. Буду рад ошибиться, чему-нибудь новому научусь.
Ещё раз. Читай внимательно. Наследование — это создание is-a отношения. Т.е. "хитровывернутый вектор" может наследовать вектор. А вот id вектором не является, по крайней мере в общепринятой терминологии. Если у него там какой-то особенный такой id, который ещё и вектор, то у него плохое именование сущностей.

r> То есть, если какой-то новичок в форуме допускает какую-то погрешность, это сразу даёт тебе повод говорить что попало?

Так я не говорил что попало.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: Два одинаковых типа
От: · Великобритания  
Дата: 21.12.24 23:18
Оценка:
Здравствуйте, rg45, Вы писали:

r> R>>У тебя тоже возникнут замечания?

r> ·>Ок. А чем это принципиально отличается от моего?
r> Так это к тебе вопрос. Видишь ли ты здесь принципиальные отличия от своего варианта и есть ли у тебя какие-либо замечания?
не вижу, замечаний нет.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[8]: Два одинаковых типа
От: rg45 СССР  
Дата: 22.12.24 00:28
Оценка:
Здравствуйте, ·, Вы писали:

·>не вижу, замечаний нет.


Ну так я же и интересуюсь, почему вот так "делать не надо":

typedef std::vector<int> ElementId;
typedef std::vector<int> LogicalId;


А вот так "замечаний нет":

typedef std::vector<int> Value;


Если "Value" может быть вектором, то почему "Id" не может быть вектором?
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 22.12.2024 0:51 rg45 . Предыдущая версия . Еще …
Отредактировано 22.12.2024 0:43 rg45 . Предыдущая версия .
Re[8]: Два одинаковых типа
От: rg45 СССР  
Дата: 22.12.24 00:37
Оценка:
Здравствуйте, ·, Вы писали:

·>Я рассказал выше.


Выше я видел только домыслы и голословное постулирование

·>Не экстрасенс, а опыт. Буду рад ошибиться, чему-нибудь новому научусь.


Уникальный опыт, нужно заметить. Об этом опыте кто-нибудь ещё знает, кроме тебя?

·>Ещё раз. Читай внимательно.


Давай договоримся сразу: ты не говоришь мне, что делать, а я не говорю, куда тебе идти. Хорошо?

·>Наследование — это создание is-a отношения. Т.е. "хитровывернутый вектор" может наследовать вектор.


А где здесь
Автор: ·
Дата: 21.12 15:38
наследование? Ни в стартовом сообщении, ни в твоём, где "не надо так делать", никакого наследования не было. Вы с Shmj не из одной команды случайно?

·>А вот id вектором не является,


А это откуда следует? Просто потому что тебе так захотелось?

·>по крайней мере в общепринятой терминологии.


А почему ты уверен, что общепринятая терминология применима в данном конкретном случае?

·>Если у него там какой-то особенный такой id, который ещё и вектор, то у него плохое именование сущностей.


О, "если"! Т.е. сначала даем "эксперные" оценки, а после этого начинаем строить предположения — если то, а если это. Ну, сразу видно — опыт

·>Так я не говорил что попало.


Хорошо, говорил, не обосновывая. Разница не велика, имхо.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 22.12.2024 0:56 rg45 . Предыдущая версия . Еще …
Отредактировано 22.12.2024 0:55 rg45 . Предыдущая версия .
Отредактировано 22.12.2024 0:53 rg45 . Предыдущая версия .
Re[4]: Два одинаковых типа
От: so5team https://stiffstream.com
Дата: 22.12.24 05:36
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Но в целом название ElementId и LogicalId с реализацие в виде вектора, например у меня вызывают некоторые вопросы.


Это запросто могут быть координаты в многомерном пространстве.
И запросто может быть так, что количество измерений в этом пространстве определяется динамически и неизвестно на этапе компиляции, поэтому и std::vector, а не std::array.
Re[5]: Два одинаковых типа
От: kov_serg Россия  
Дата: 22.12.24 08:14
Оценка:
Здравствуйте, so5team, Вы писали:

S>Это запросто могут быть координаты в многомерном пространстве.

Это уже не id а набор признаков

S>И запросто может быть так, что количество измерений в этом пространстве определяется динамически и неизвестно на этапе компиляции, поэтому и std::vector, а не std::array.


Дело не в этом. Id предполагает хотя бы сравнение этих самых id
Re[9]: Два одинаковых типа
От: · Великобритания  
Дата: 22.12.24 09:50
Оценка:
Здравствуйте, rg45, Вы писали:

r>
r> typedef std::vector<int> Value;
r>

r> Если "Value" может быть вектором, то почему "Id" не может быть вектором?
"private:" — важная деталь.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[10]: Два одинаковых типа
От: rg45 СССР  
Дата: 22.12.24 12:10
Оценка:
Здравствуйте, ·, Вы писали:

r>> Если "Value" может быть вектором, то почему "Id" не может быть вектором?

·>"private:" — важная деталь.

А как ты понял, что определения автора, указанные в стартовом сообщении, не находятся в секции private?
--
Справедливость выше закона. А человечность выше справедливости.
Re[5]: Два одинаковых типа
От: DenProg  
Дата: 22.12.24 13:32
Оценка:
Здравствуйте, so5team, Вы писали:

S>Здравствуйте, kov_serg, Вы писали:


_>>Но в целом название ElementId и LogicalId с реализацие в виде вектора, например у меня вызывают некоторые вопросы.


S>Это запросто могут быть координаты в многомерном пространстве.

S>И запросто может быть так, что количество измерений в этом пространстве определяется динамически и неизвестно на этапе компиляции, поэтому и std::vector, а не std::array.

ElementId — это уникальный Id элемента иерархии.
LogicalId — тоже Id элемента той же иерархии, но без определенного слоя.
Re[2]: Два одинаковых типа
От: DenProg  
Дата: 22.12.24 13:34
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, DenProg, Вы писали:


DP>> Привет. Есть два типа определенные одинаково:

DP>>
DP>> typedef std::vector<int> ElementId;
DP>> typedef std::vector<int> LogicalId;
DP>>

·>Не надо так делать. Лучше так:
·>
·>class ElementId
·>{
·>private: 
·>   std::vector<int> value;
·>public:
·>   // методы, имеющие смысл для id, а не вся простыня вектора
·>}
·>


Нет, заводить на это отдельный класс и наследовать все методы вектора нет смысла, ибо они будут просто вызываться с теми же сигнатурами.
Re[7]: Два одинаковых типа
От: cserg  
Дата: 22.12.24 14:13
Оценка:
Здравствуйте, so5team, Вы писали:

S>В проекте, которому сейчас помогаю, как раз объекты однозначно идентифицируются координатами в N-мерном пространстве. И это именно что полный аналог Id, а не набор признаков.

Но у вас же, скорее всего, нет ситуации, когда в некотором N-мерном пространстве вместе существуют объекты с N-x и N+y размерностям?
Re[6]: Два одинаковых типа
От: kov_serg Россия  
Дата: 22.12.24 14:36
Оценка:
Здравствуйте, 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;
Re[7]: Два одинаковых типа
От: rg45 СССР  
Дата: 22.12.24 14:45
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>ID это число однозначно идентифицирующее что-либо.


Почему только число? А строка может быть?
--
Справедливость выше закона. А человечность выше справедливости.
Re[8]: Два одинаковых типа
От: kov_serg Россия  
Дата: 22.12.24 14:59
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, kov_serg, Вы писали:


_>>ID это число однозначно идентифицирующее что-либо.


R>Почему только число? А строка может быть?

Потому что из простых соображений на практике достаточно int32 или int64 для распределённых систем guid(int128)
Re[9]: Два одинаковых типа
От: rg45 СССР  
Дата: 22.12.24 15:02
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Потому что из простых соображений на практике достаточно int32 или int64 для распределённых систем guid(int128)


Ну, как шутка проканает
--
Справедливость выше закона. А человечность выше справедливости.
Re[8]: Два одинаковых типа
От: so5team https://stiffstream.com
Дата: 22.12.24 15:24
Оценка:
Здравствуйте, cserg, Вы писали:

C>Здравствуйте, so5team, Вы писали:


S>>В проекте, которому сейчас помогаю, как раз объекты однозначно идентифицируются координатами в N-мерном пространстве. И это именно что полный аналог Id, а не набор признаков.

C>Но у вас же, скорее всего, нет ситуации, когда в некотором N-мерном пространстве вместе существуют объекты с N-x и N+y размерностям?

А при чем здесь это? Посыл же был в том, что вектор целых вряд ли может служить в качестве ID. Я привел пример ситуации, когда может.

Касательно предметной области из которой был взят пример, то да, в рамках одного и того же N-мерного пространства не может быть объектов, координаты которых содержат (N-x) или (N+y) значений. Но в самом приложении одновременно существует несколько пространств разных размерностей.
Re[7]: Два одинаковых типа
От: DenProg  
Дата: 22.12.24 19:44
Оценка:
Здравствуйте, 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 наверно раньше не слышал.
Re[4]: Два одинаковых типа
От: DenProg  
Дата: 22.12.24 19:47
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, rg45, Вы писали:


r>> ·>Не надо так делать. Лучше так:

r>> Обоснование будет какое-нибудь?
·>Код проще читать и поддерживать.

r>> ·> // методы, имеющие смысл для id, а не вся простыня вектора

r>> А почему ты уверен, что не вся простыня вектора имеет смысл для ID?
·>Потому что ID это (is-a) не вектор.

r>> Если человек выбрал вектор для задания собственных типов, то, возможно, ему и нужна вся "простыня"?

·>Интуитивно уверен, что невозможно в данном случае. Буду рад услышать обоснование нужности, желательно от автора.

Нужны все основные методы вектора. И переопределять их в новом классе смысла нет.
Re[5]: Два одинаковых типа
От: sergii.p  
Дата: 23.12.24 10:18
Оценка:
Здравствуйте, DenProg, Вы писали:

DP>Нужны все основные методы вектора. И переопределять их в новом классе смысла нет.


тогда так

struct ElementId: std::vector<int> {};
Re[8]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 10:47
Оценка:
Здравствуйте, DenProg, Вы писали:

DP>Проблема в названии? У меня это вектор. Слава богу язык этого не запрещает. Про std::dict наверно раньше не слышал.

Не заморачивайся это опечатка должно было быть std::map. Я просто обычно его переименовываю в dict
Re[2]: Два одинаковых типа
От: rg45 СССР  
Дата: 23.12.24 10:50
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Я бы предложил не морочить себе голову, а просто завернуть в структуру.

К>Пусть даже с публичным полем, — чтобы минимально возиться с вопросами, что надо от вектора, а что не надо. Потом при случае отрефакторить, благо, все точки использования хорошо видны (поиском по имени поля либо кровавым рефакторингом — сделать приватным и смотреть, где компиляция сломалась).

К>
К>using IntVec = std::vector<int>;

К>struct ElementId { IntVec data; };
К>struct LogicalId { IntVec data; };
К>


Практически это то же самое, что и в подходе с BOOST_STRONG_TYPEDEF, только без привлечения boost.
--
Справедливость выше закона. А человечность выше справедливости.
Re[11]: Два одинаковых типа
От: rg45 СССР  
Дата: 23.12.24 10:53
Оценка:
Здравствуйте, kov_serg, Вы писали:

R>>Так что, вопрос можно ли использовать вектор для задания ID, или нельзя — это вообще оффтоп в данном случае.


_>Прикалываетесь?


Даже не думал.

_>
_>typedef int ID;
_>struct ElementId { ID value; };
_>struct LogicalId { ID value; };
_>


Не понял, что ты хочешь этим сказать. Разверни свою мысль словами, если не трудно.
--
Справедливость выше закона. А человечность выше справедливости.
Re[12]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 10:58
Оценка:
Здравствуйте, rg45, Вы писали:

R>Не понял, что ты хочешь этим сказать. Разверни свою мысль словами, если не трудно.


Мысть простоя: на практике идентификатора в виде числа фиксированной длинны более чем достаточно.
Re[13]: Два одинаковых типа
От: rg45 СССР  
Дата: 23.12.24 11:00
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Мысть простоя: на практике идентификатора в виде числа фиксированной длинны более чем достаточно.


А как это противоречит тому, что написал я
Автор: rg45
Дата: 22.12 20:55
?

Даже не так. Как это, вообще, связано с тем, что написал я? Какое именно МОЁ высказывание вызывает у тебя несогласие?
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 23.12.2024 11:14 rg45 . Предыдущая версия . Еще …
Отредактировано 23.12.2024 11:02 rg45 . Предыдущая версия .
Отредактировано 23.12.2024 11:01 rg45 . Предыдущая версия .
Re[14]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 11:37
Оценка:
Здравствуйте, rg45, Вы писали:

R>А как это противоречит тому, что написал я
Автор: rg45
Дата: 22.12 20:55
?

typedef int ElementId;
typedef int LogicalId;

void func(ElementId&);
void func(LogicalId&); // <- ???


R>Даже не так. Как это, вообще, связано с тем, что написал я? Какое именно МОЁ высказывание вызывает у тебя несогласие?


"Не понял, что ты хочешь этим сказать. Разверни свою мысль словами, если не трудно."
Re[15]: Два одинаковых типа
От: rg45 СССР  
Дата: 23.12.24 11:45
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>"Не понял, что ты хочешь этим сказать. Разверни свою мысль словами, если не трудно."


Вот это сообщение
Автор: kov_serg
Дата: 23.12 13:40
я воспринял как несогласие. Только не понял, как какому именно из двух высказываний это несогласие относится:


Пояснишь?
--
Справедливость выше закона. А человечность выше справедливости.
Re[16]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 11:56
Оценка:
Здравствуйте, rg45, Вы писали:

R>Вот это сообщение
Автор: kov_serg
Дата: 23.12 13:40
я воспринял как несогласие. Только не понял, как какому именно из двух высказываний это несогласие относится:


R> Главный вопрос этой темы можно было бы переформулировать для чисел;

можно
R> Вопрос, можно ли использовать вектор для задания ID, является оффтопом для данной темы.
я просто высказал сомнения что вектор это не самый удачный выбор для типа идентификатора

R>Пояснишь?

Вы просто не в том контексте смотрите. Поэтому и возникли такие разночтения.

> ElementId — это уникальный Id элемента иерархии.

> LogicalId — тоже Id элемента той же иерархии, но без определенного слоя.

ElementId — это путь к элементу
LogicalId — это локальный путь, отностиельно некоторого узла.

То есть это дерево (аналог файловая система)

[ElementId]
root-->a-->b-->c-->element_1
root-->a-->b-->element_2
root-->d-->a-->element_3
root-->e-->a-->element_4

[LogicalId]
a-->element_3

И в качестве идентификаторов логично использовать числа 1,2,3,4

То есть назвать это не Id а Path:
ElementPath
LogicalPath
Re[17]: Два одинаковых типа
От: rg45 СССР  
Дата: 23.12.24 12:10
Оценка:
Здравствуйте, kov_serg, Вы писали:

R>>Пояснишь?

_>Вы просто не в том контексте смотрите. Поэтому и возникли такие разночтения.
_> . . .

Разночтения возникли из-за того, что ты неожиданно перескочил к тому, что мы обсуждали выше. Я считал, что тот вопрос мы уже закрыли, но если хочешь, можем продолжить обсуждение.

_>я просто высказал сомнения что вектор это не самый удачный выбор для типа идентификатора


Остановились мы вот на чём:

http://rsdn.org/forum/cpp/8871506.1
Автор: rg45
Дата: 22.12 17:45


_> ID это число однозначно идентифицирующее что-либо.
R> Почему только число? А строка может быть?


Вот с этого места давай и продолжим. Твой ход.

Там после этого с твоей стороны была ещё одна фраза, но я её воспринял как шутку, беря во внимание смайлик в конце утверждения.
--
Справедливость выше закона. А человечность выше справедливости.
Re[18]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 12:17
Оценка:
Здравствуйте, rg45, Вы писали:

R>Остановились мы вот на чём:


R>http://rsdn.org/forum/cpp/8871506.1
Автор: rg45
Дата: 22.12 17:45


R>

_>> ID это число однозначно идентифицирующее что-либо.
R>> Почему только число? А строка может быть?


R>Вот с этого места давай и продолжим. Твой ход.

Я смотрю вы заядлый шахматист.
Да строка может быть. Но желательно фиксированной длинны. Например "1PRTTaJesdNovgne6Ehcdu1fpEdX7913CK"

R>Там после этого с твоей стороны была ещё одна фраза, но я её воспринял как шутку, беря во внимание смайлик в конце утверждения.

я думала это трюфель

Re[19]: Два одинаковых типа
От: rg45 СССР  
Дата: 23.12.24 12:20
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Да строка может быть. Но желательно фиксированной длинны. Например "1PRTTaJesdNovgne6Ehcdu1fpEdX7913CK"


Было бы здорово, если бы ты обосновывал свои утверждения а не просто постулировал. Для кого желательно, почему желательно, насколько желательно и т.п. В противном случае ты сам лишаешь меня возможности принять твою точку зрения.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 23.12.2024 12:49 rg45 . Предыдущая версия . Еще …
Отредактировано 23.12.2024 12:43 rg45 . Предыдущая версия .
Отредактировано 23.12.2024 12:28 rg45 . Предыдущая версия .
Re[20]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 12:48
Оценка:
Здравствуйте, rg45, Вы писали:

R>Было бы здорово, если бы ты обосновывал свои утверждения а не просто постулировал. Для кого желательно, почему желательно и т.п.

Для быстродействия желательно фиксированный размер данных равный размеру регистра процессора или хотябы не сильно избыточный (не превосходящий L1 кэш)
Данные фиксированной длинны лучше размещаются в памяти и их проще кэшировать, читать, писать, сравнивать, чем данные непредсказуемой длинны. Для которых обычно используют hash функции, что бы уменьшить кол-во обращений непосредственно к телу. Вобщем сплошные дополнительные накладные расходы из ничего.

ps: промежуточные представления в виде строки, тоже никто не запрещает
Re[21]: Два одинаковых типа
От: rg45 СССР  
Дата: 23.12.24 13:00
Оценка:
Здравствуйте, kov_serg, Вы писали:

R>>Было бы здорово, если бы ты обосновывал свои утверждения а не просто постулировал. Для кого желательно, почему желательно и т.п.

_>Для быстродействия желательно фиксированный размер данных равный размеру регистра процессора или хотябы не сильно избыточный (не превосходящий L1 кэш)
_>Данные фиксированной длинны лучше размещаются в памяти и их проще кэшировать, читать, писать, сравнивать, чем данные непредсказуемой длинны. Для которых обычно используют hash функции, что бы уменьшить кол-во обращений непосредственно к телу. Вобщем сплошные дополнительные накладные расходы из ничего.

_>ps: промежуточные представления в виде строки, тоже никто не запрещает



А, то есть, желательно с точки зрения быстродействия. Ну, ОК. То есть, в тех местах, где быстродействие не критично, допустимо применять также и строки переменной длины, согласен?

Итого, в качестве идентификаторов можно использовать: числа, перечисления и классы. Таким образом, если вернуться к началу дискусси
Автор: kov_serg
Дата: 22.12 17:36
, то ID — это что угодно, однозначно идентифицирующее что-либо.

Хорошо. И как мы приходим к заключению, что тип std::vector<int> не может или не должен использоваться в качестве ID?
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 23.12.2024 13:03 rg45 . Предыдущая версия . Еще …
Отредактировано 23.12.2024 13:03 rg45 . Предыдущая версия .
Re[22]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 13:11
Оценка:
Здравствуйте, rg45, Вы писали:

R>Хорошо. И как мы приходим к заключению, что тип std::vector<int> не может или не должен использоваться в качестве ID.

Я нигде не писал что он не может быть использован. Я писал что возникают вопросы.
Типа:
— а не избыточенли такой тип в качестве идентификатора
— если это путь к объкету в некотором дереве то и называть его логичнее не идентификатором а "положением" location или "путём" path
— если это набор характеристик, то allele, bag of properties или вектором признаков
Re[23]: Два одинаковых типа
От: rg45 СССР  
Дата: 23.12.24 13:14
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Я нигде не писал что он не может быть использован. Я писал что возникают вопросы.


Ну, как обычно: на третий день дискуссии настал момент уточнить предмет спора

_>Типа:

_>- а не избыточенли такой тип в качестве идентификатора

Всё может быть. Это вопрос к автору.

_>- если это путь к объкету в некотором дереве то и называть его логичнее не идентификатором а "положением" location или "путём" path

_>- если это набор характеристик, то allele, bag of properties или вектором признаков

Всё может быть. Чего ты до сих пор не задал эти вопросы автору?
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 23.12.2024 13:15 rg45 . Предыдущая версия .
Re[24]: Два одинаковых типа
От: kov_serg Россия  
Дата: 23.12.24 13:21
Оценка:
Здравствуйте, rg45, Вы писали:

R>Всё может быть. Чего ты до сих пор не задал эти вопросы автору?

Не видел в этом смысла.
Re[25]: Два одинаковых типа
От: rg45 СССР  
Дата: 23.12.24 13:22
Оценка:
Здравствуйте, kov_serg, Вы писали:

R>>Всё может быть. Чего ты до сих пор не задал эти вопросы автору?

_>Не видел в этом смысла.

Вместо этого ты решил повыносить мозг мне
--
Справедливость выше закона. А человечность выше справедливости.
Re[17]: Два одинаковых типа
От: DenProg  
Дата: 23.12.24 16:22
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Здравствуйте, rg45, Вы писали:


R>>Вот это сообщение
Автор: kov_serg
Дата: 23.12 13:40
я воспринял как несогласие. Только не понял, как какому именно из двух высказываний это несогласие относится:


R>> Главный вопрос этой темы можно было бы переформулировать для чисел;

_>можно
R>> Вопрос, можно ли использовать вектор для задания ID, является оффтопом для данной темы.
_>я просто высказал сомнения что вектор это не самый удачный выбор для типа идентификатора

R>>Пояснишь?

_>Вы просто не в том контексте смотрите. Поэтому и возникли такие разночтения.

>> ElementId — это уникальный Id элемента иерархии.

>> LogicalId — тоже Id элемента той же иерархии, но без определенного слоя.

_>ElementId — это путь к элементу

_>LogicalId — это локальный путь, отностиельно некоторого узла.

_>То есть это дерево (аналог файловая система)


_>[ElementId]

_>root-->a-->b-->c-->element_1
_>root-->a-->b-->element_2
_>root-->d-->a-->element_3
_>root-->e-->a-->element_4

_>[LogicalId]

a-->>element_3

_>И в качестве идентификаторов логично использовать числа 1,2,3,4


_>То есть назвать это не Id а Path:

_>ElementPath
_>LogicalPath

Путь в данном случае — это способ реализации идентификатора. Id реализовано на основе path.
Re[8]: Два одинаковых типа
От: · Великобритания  
Дата: 23.12.24 17:56
Оценка:
Здравствуйте, DenProg, Вы писали:

DP> DP>>ElementId — это уникальный Id элемента иерархии.

DP> DP>>LogicalId — тоже Id элемента той же иерархии, но без определенного слоя.
DP> Проблема в названии?
Да, название странное. Это Path, Position, Coords, Address, Location, и т.п. Неясно причём тут ID. Чем является элемент в векторе тогда?
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Два одинаковых типа
От: · Великобритания  
Дата: 23.12.24 17:56
Оценка:
Здравствуйте, DenProg, Вы писали:

DP> Нет, заводить на это отдельный класс и наследовать все методы вектора нет смысла, ибо они будут просто вызываться с теми же сигнатурами.

Точно все? и erase, и emplace, etc? А сравнение LogicalId и ElementId?
В любом случае, это недостаточное условие для применения наследования. Наследование подразумевает, что оно будет прозрачно приводиться к базовому типу и всё что работает с вектором должно работать так же как и с твоим классом.
https://en.wikipedia.org/wiki/Composition_over_inheritance
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.