Nim. Как наследовать все операции по отдельному типу? - PullRequest
1 голос
/ 11 января 2020

Предположим, у меня есть type Radians = distinct float и type Degrees = distinct float
Это не позволяет мне использовать все операции, доступные для чисел с плавающей запятой, даже большинство базовых c арифметических операций +, -, *
Есть ли способ сортировать их по наследству и использовать distinct только для проверок во время компиляции?

1 Ответ

3 голосов
/ 11 января 2020

Ознакомьтесь с разделом Моделирование валют из типа Distinct в руководстве nim для полного примера.

В итоге:

Используйте прагму заимствования

proc `*` (x: int, y: Dollar): Dollar {.borrow.}
proc `div` (x: Dollar, y: int): Dollar {.borrow.}

Использование шаблонов для уменьшения шаблонов

template multiplicative(typ, base: typedesc) =
  proc `*` *(x: typ, y: base): typ {.borrow.}
  proc `*` *(x: base, y: typ): typ {.borrow.}
  proc `div` *(x: typ, y: base): typ {.borrow.}
  proc `mod` *(x: typ, y: base): typ {.borrow.}
...