Специализация promises для обеспечения высокоэффективных внедрений для примитивных типов с минимальным дополнительным шаблоном. Но специализация, похоже, слишком жаждет собственного блага. Если я хочу специализировать класс или метод,
def foo[@specialized(Byte) A](a: A): String = ???
class Bar[@specialized(Int) B] {
var b: B = ???
def baz: B = ???
}
тогда мне нужно написать единую реализацию, которая охватывает как специализированные, так и общие случаи.
Что делать, если эти случаи действительно отличаются друг от друга, так что реализации не перекрываются?
Например, если бы я хотел выполнить математику по байтам, мне нужно было бы вставить кучу & 0xFF
в
логика.
Я мог бы написать специализированный тип-класс для правильной математики, но это не просто толкает то же самое
проблема на одном уровне? Как написать мой специализированный метод +
для этого типа класса таким образом, чтобы он не
конфликт с более общей реализацией?
class Adder[@specialized(Byte) A] {
def +(a1: A, a2: A): A = ???
}
Кроме того, как только я создаю класс типа таким образом, как я могу убедиться, что правильный тип класса используется для моих специализированных методов вместо общей версии (которая, если она действительно является общей, должна, вероятно, компилироваться и, конечно же, работать, за исключением того, что это не то, что я хочу)?
Есть ли способ сделать это без макросов? С макросами проще?