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: |

Hashtags are a fast way to find the correct information on social media. To put your content out there, be sure to add hashtags to each post. We have two intelligent tips to give you: Clear To delete a channel with over 1,000 subscribers, you need to contact user support 3How to create a Telegram channel? A new window will come up. Enter your channel name and bio. (See the character limits above.) Click “Create.”
from us


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