- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
template <typename IdType, class Tag>
class id {
public:
typedef IdType value_type;
explicit id(value_type val)
: value(val)
{}
bool operator==(id rhs)
{
return rhs.value == value;
}
bool operator!=(id rhs)
{
return rhs.value != value;
}
value_type value;
};
#define HASKELL_NEWTYPE(type_name, value_type) struct __##type_name##_tag__ {}; \
typedef ::id<value_type, __##type_name##_tag__> type_name
Когда newtype нет, но очень хочется.
http://ideone.com/VRu56j
Простите за синтетику
ну и в реализации явно есть проблемы
http://ideone.com/BEBK7Z
>никогда такого нужно не было
не сошлись во мнениях.
Почему данные public? И проверку неравенства может надо через проверку равенства, не?
Не пойму - какой от этого профит?
Конкретно в текущем проекте нам это могло бы пригодится, ибо много числовых идентификаторов, которые иногда путаются друг с другом.
@Yuuri по этому поводу вздыхал по хаскелевским newtype, за пять минут было придумано решение. Но, думаю, профит от этого не превышает возникающих проблем, внедрять не будем, разумеется.
Нам было нужно что-то вроде
А так - согласен, генератор лучше отдельный сделать.
К сожалению, макрос, как правильно указал @defecate-plusplus, страдает от непреодолимых (?) преблем для типов в неймспесах или шаблонных типов.
трудный день
Перечитал тред: то ли сон клонит, то ли от плотность крестоблядства на один пост, но аж голова кругом идёт.