Я хотел бы иметь способ определения вычислительных типов (например, somethng, который действует как «ограниченный int »), которые автоматически не преобразуются в свои базовые типы или друг в друга - поведение, подобноек типизированным указателям.
Например, я хотел бы иметь возможность определять типы XCoord и YCoord для координат X и Y.Я могу сделать это с помощью typedef, конечно же, , и это делает мой код более явным, но я действительно хочу, чтобы компилятор жаловался, когда я случайно передаю координату Y в качестве аргумента вызова функции, когда должениспользовал координату XДругой вариант использования - связывание размерных единиц с числами, чтобы получить жалобу, если кто-то случайно добавил число в метрах в весе в граммах.
Да, я знаю, этот пример упрощен и глоссарийнад многими проблемами.Я хотел бы указать числовые значения.Я хотел бы перебрать диапазоны значений.Я хотел бы вычесть два значения XCoord (и получить int ?).Я хотел бы использовать их в качестве подписчиков массива.Я уверен, что есть целый ряд способов, о которых я не задумывался подробно, и хотя было бы неплохо, чтобы все они работали прозрачно, я не против небольшого синтаксического неудобства (например, вызова функции-члена).в некоторых случаях.
В основном я вижу, как собрать решение с шаблонами и перегрузкой операторов и, вероятно, получить большую часть того, что я хочу.Однако я надеюсь, что есть решение, создатели которого уже проделали тяжелую работу, исследовали угловые случаи и сделали надлежащие компромиссы между удобством и функциональностью.
И, конечно, они 'это просто базовые типы с добавленной проверкой во время компиляции - поэтому решение должно иметь нулевые потери производительности во время выполнения относительно базовых типов, как typedef
Существует ли такая вещь?Является ли решение, использующее языковые контракты, настолько сложным и удивительным, что мне было бы лучше использовать обычный старый typedefs и инструмент, подобный lint ?И если да, то есть ли такой инструмент?