CPPLASTIC Telegram 378
Cіпласпластик
У 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. Але взагалі писати такий код з перевантаженням коми краще не треба ))
Please open Telegram to view this post
VIEW IN TELEGRAM
😭8👍4🙈41👎1🔥1🥰1



tgoop.com/cpplastic/378
Create:
Last Update:

Оцей підхід багатовимірної індексації з 💻 наштовхнув мене на думку, що не обовʼязково було чекати на новий стандарт 💻.

Я вже колись робив 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. Але взагалі писати такий код з перевантаженням коми краще не треба ))

BY Cіпласпластик


Share with your friend now:
tgoop.com/cpplastic/378

View MORE
Open in Telegram


Telegram News

Date: |

Public channels are public to the internet, regardless of whether or not they are subscribed. A public channel is displayed in search results and has a short address (link). How to create a business channel on Telegram? (Tutorial) With the “Bear Market Screaming Therapy Group,” we’ve now transcended language. How to create a business channel on Telegram? (Tutorial) Developing social channels based on exchanging a single message isn’t exactly new, of course. Back in 2014, the “Yo” app was launched with the sole purpose of enabling users to send each other the greeting “Yo.”
from us


Telegram Cіпласпластик
FROM American