Подтвердить что ты не робот

Создание новых типов в С++

Использование typedef в С++ создает псевдоним для типа.

Итак:

typedef double Length;
typedef double Mass;

создает две псевдонимы, которые могут быть перемешаны. Другими словами, мы можем передать значение типа Mass функции, ожидающей значения типа Length.

Есть ли легкий способ создания новых типов? Я бы хотел, чтобы они были вдвое ниже, но были "разными", чтобы их нельзя было использовать вместо другого.

Я бы предпочел что-то легче, чем создание нового класса или структуры. Кроме того, я знаю размеры lib в boost. Это сложнее и делает намного больше, чем мне нужно.

4b9b3361

Ответ 1

BOOST_STRONG_TYPEDEF, похоже, спроектирован именно для того, что вы ищете. Я считаю, что это волшебство, создавая класс и перегружая операторов, чтобы заставить его вести себя как встроенный тип, но я не рассматривал его реализацию.

Ответ 2

В то время как BOOST_STRONG_TYPEDEF - довольно простое решение, если вы смешиваете длины и массы в более сложные единицы (например, в физических науках), вы можете использовать Boost.Units.

Ответ 3

Если предложение Metlasslasses (p7070) проходит (сейчас оно все еще находится в revision0), тогда мы сможем создать сильные typedefs используя пустой метакласс. Предлагаемый синтаксис:

$class strong_typedef { };
using Length = $double.as(strong_typedef);
using Mass = $double.as(strong_typedef);

Раньше мы могли видеть, что это будет С++ 20