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-х регістрах і їх неможливо елегантно розділити однією командою.
мені потрібно створити одну функцію для роботи з різними типами цілочисельних змінних, яка буде працювати в залежності від розміру конкретної змінної
Якщо вам дуже хочеться використовувати дженерики, то можете скористатися ось таким варіантом:
Тільки не забудьте перерахувати всі типи, з якими ви маєте намір працювати.