Size: a a a

2020 August 20

KO

Konstantin Osipov in pro.cxx
Александр Караев
зачем using? методы сами подтянутся в наследника, не считая парочки перекрытых
Операторы не будут работать как надо
источник

KO

Konstantin Osipov in pro.cxx
Я могу просто макрос написать, который мне будет нужный тип генерировать, но я слышал макросами лучше не пользоваться.
источник

O

Ofee in pro.cxx
Konstantin Osipov
Операторы не будут работать как надо
А можно пример?
источник

KO

Konstantin Osipov in pro.cxx
ну например operator+ возвращает базовый класс, видимо надо будет писать неявное приведение базового класса к наследуемуему чтобы это работало?
источник

AK

Andrei K in pro.cxx
Для 100% тайпсефовости можно наследовать enum class от нужного числового типа
источник

AK

Andrei K in pro.cxx
Но придётся ручками написать всю семанитку.
источник

АК

Александр Караев... in pro.cxx
Strong typedef не реализуется красиво в C++, но меньшее, чем можно пожертвовать, это красивые логи ошибок
источник

KO

Konstantin Osipov in pro.cxx
источник

CD

Constantine Drozdov in pro.cxx
enum class myint : int {};
источник

CD

Constantine Drozdov in pro.cxx
enum class myint: int {};  

myint operator + (myint lhs, myint rhs) {
   return myint{static_cast<int>(lhs) + static_cast<int>(rhs)};
}
                                                                             
int main() {                                                                    
   myint a{3};  
   myint b{42};  
   myint c = a + b;
}
источник

O

Ofee in pro.cxx
Konstantin Osipov
ну например operator+ возвращает базовый класс, видимо надо будет писать неявное приведение базового класса к наследуемуему чтобы это работало?
Разве этого недостаточно более сложных классов?

struct strong_alias_to_base : base {
 template<typename... T>
 strong_alias_to_base(T&&... b)
   : base{std::forward<T>(b)...} {}
};

Пока лишь вижу потенциальную проблему с видом скобок в конструкторе
источник

O

Ofee in pro.cxx
Ofee
Разве этого недостаточно более сложных классов?

struct strong_alias_to_base : base {
 template<typename... T>
 strong_alias_to_base(T&&... b)
   : base{std::forward<T>(b)...} {}
};

Пока лишь вижу потенциальную проблему с видом скобок в конструкторе
И какой-то шаблонный код может сломаться, если там явно проверяется тип через is_same, но так в этом и была цель
источник

KO

Konstantin Osipov in pro.cxx
Constantine Drozdov
enum class myint: int {};  

myint operator + (myint lhs, myint rhs) {
   return myint{static_cast<int>(lhs) + static_cast<int>(rhs)};
}
                                                                             
int main() {                                                                    
   myint a{3};  
   myint b{42};  
   myint c = a + b;
}
проблема в том что мне таких 3 штуки нужно
источник

KO

Konstantin Osipov in pro.cxx
для каждого типа измерения.
источник

KO

Konstantin Osipov in pro.cxx
и с помощью шаблонов я хотел избежать дублирования кода всех операторов
источник

CD

Constantine Drozdov in pro.cxx
Konstantin Osipov
проблема в том что мне таких 3 штуки нужно
а вы можете обще описать операции?
источник

KO

Konstantin Osipov in pro.cxx
плюс, инкремент
источник

CD

Constantine Drozdov in pro.cxx
Konstantin Osipov
плюс, инкремент
типы результатов?
источник

KO

Konstantin Osipov in pro.cxx
всё что с обычными числами связано.
источник

KO

Konstantin Osipov in pro.cxx
короче, если конкретно, это log sequence number и epoch number - логическое время и номер записи в журнале
источник