TGViewer
Сіпласпластик Сіпласпластик @cpplastic · 739 subscribers
Post #378 851
Сіпласпластик У Python 💻 метод __getitem__ завжди приймає тільки один параметр
Оцей підхід багатовимірної індексації з 💻 наштовхнув мене на думку, що не обовʼязково було чекати на новий стандарт 💻.

Я вже колись робив 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
More from @cpplastic
  1. Oct 7, 2026Post #543
  2. Oct 2, 2026Щось не злетіло з self-driving cars у автовиробників, еге ж? А стільки галасу було. Ну зат…
  3. Sep 24, 2026Ух, яку ж класну доповідь подивився: «Scott Jenson: Are we really going to use the same De…
  4. Sep 23, 2026Post #540
  5. Sep 21, 2026«Порекламую» вам український сайт, який мені дуже подобається. Взяв слово в лапки, бо як і…
  6. Sep 18, 2026Ви ж знаєте, що я полюбляю Tailscale 💠 попри те, що недоліків у них теж вистачає? Але сам…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →