🇺🇦 Про айті та дотичні теми загалом, ну й трохи про C++.
Усі думки тут відображають виключно мій особистий погляд.
Мої емоджі:
https://t.me/addemoji/AdaptiveDevIcons
https://t.me/addemoji/VehicleBrands
Post #378
851
Сіпласпластик У Python 💻 метод __getitem__ завжди приймає тільки один параметр
Оцей підхід багатовимірної індексації з 💻 наштовхнув мене на думку, що не обовʼязково було чекати на новий стандарт 💻.
Я вже колись робив
який друкує:
Працює, починаючи з C++11 🙂
Магії тут, звісно, небагато. Отже, індексація була тільки одновимірна, тобто параметр може бути тільки один, а значить звичайний
то еквівалентом буде
або ж просто
За великого бажання можна навіть зробити типізацію цікавішою, щоб компілятор вам більше ніколи не дозволяв сплутати, що ж там перше йде,
Короч, ось мій приклад: https://ideone.com/zeZuQ0. Але взагалі писати такий код з перевантаженням коми краще не треба ))
Я вже колись робив
operator ±. А тепер зустрічайте мій хуйовий розвʼязок нової задачі! Отже, маємо отакий код:int main() {
Matrix m;
// ...
cout << m[100'500row, 13col]; // 🪄 magic
return 0;
}який друкує:
Element at row 100500 and column 13 is 42
Працює, починаючи з C++11 🙂
Магії тут, звісно, небагато. Отже, індексація була тільки одновимірна, тобто параметр може бути тільки один, а значить звичайний
int не підходить. Натомість робимо свій тип (я назвав Index2D), що містить row і column. Тепер питання в тому, як два числа запакувати в цей тип, не викликаючи конструктор Index2D явно. Для цього робимо конструктор, що приймає тільки одне число (row), а також створюємо власний літерал, який його викликатиме. Далі для Index2D перевантажуємо operator, (так, ко́му можна перевизначити в C++), через який пхаємо друге число. Для симетрії також робимо власний літерал. І вуаля. Таким чином, якщо «розгорнути»m[100'500row, 13col]
то еквівалентом буде
m[Index2D{100'500}, 13];або ж просто
m.operator[](operator""row(100'500).operator,(operator""col(13)))
За великого бажання можна навіть зробити типізацію цікавішою, щоб компілятор вам більше ніколи не дозволяв сплутати, що ж там перше йде,
row чи column, x чи y…Короч, ось мій приклад: https://ideone.com/zeZuQ0. Але взагалі писати такий код з перевантаженням коми краще не треба ))
- 😭 8
- 👍 4
- 🙈 4
- ❤ 1
- 👎 1
- 🔥 1
- 🥰 1


