Як правильно використовувати generics в delphi xe stack overflow російською

Delphi видає в цьому місці помилку:

Operator not applicable to this operand type

Це нормальна ситуація, і я просто неправильно використовую generics або в коді щось не так написав?

Коротенько про завдання: мені потрібно створити одну функцію для роботи з різними типами цілочисельних змінних, яка буде працювати в залежності від розміру конкретної змінної, переданої програмістом. Планувалося щось на зразок цього:

Якщо це неправильне використання generics. буду радий дізнатися, в чому саме помилка.

Це нормальна ситуація, і я просто неправильно використовую generics або в коді щось не так написав?

За визначенням, оператор mod виконує операцію цілочисельного ділення з поверненням залишку. Як операнди для цього оператора допустимо використовувати тільки цілі числа (Byte. Word. Cardinal. Integer. Int64. UInt64.), А всі інші типи заборонені, про що вам і говорить компілятор.

Під капотом, при целочисленном розподілі використовуються асемблерні команди div (для беззнакових типів) і idiv (для типів зі знаком). І вся відмінність ділення чисел з різною Бітність полягає лише в тому, в які регістри будуть поміщені операнди і в яких регістрах буде результат (залишок). Детальніше про регістри можете почитати тут.

На 32-х бітної платформі, для поділу 64-бітних цілих використовуються вбудовані процедури __llmod. __llumod. оскільки в цьому випадку такі числа зберігаються відразу в 2-х регістрах і їх неможливо елегантно розділити однією командою.

мені потрібно створити одну функцію для роботи з різними типами цілочисельних змінних, яка буде працювати в залежності від розміру конкретної змінної

Якщо вам дуже хочеться використовувати дженерики, то можете скористатися ось таким варіантом:

Тільки не забудьте перерахувати всі типи, з якими ви маєте намір працювати.

Схожі статті