Size: a a a

2020 June 29

A

Alex Ф-ф-фэils!🌠︙... in pro.cxx
Alexander Zaitsev
ну один к одному все концепты\трейты - не уверен. черпать идеи - определенно можно и нужно
Именно так, да
источник

A

Alex in pro.cxx
magras
char8_t предназначен именно для хранения utf8 символов. Не надо в нем хранить бинарные данные. Если нужно избежать aliasing'а, есть [u]int8_t. Более того, для basic_string<char8_t> есть тайпдеф u8string. Ну и в целом практика использования строки для бинарных данных мне кажется порочной. Нужен SSO? Есть folly::small_vector. Я думаю есть еще миллион библиотек, которые предоставляют подобные типы.
[u]int8_t никак не помогает избежать алиасинга, это обычно тайпдеф на char / uchar.
источник

m

magras in pro.cxx
Alex
[u]int8_t никак не помогает избежать алиасинга, это обычно тайпдеф на char / uchar.
Да здесь я не прав. Но всегда остается прием с enum'ом.
источник

m

magras in pro.cxx
Хотя кажется, enum имеет минимальный размер int'а. хм.
источник

m

magras in pro.cxx
Или это только при автоматическом выводе типа?
источник

АР

Андрей Руссков... in pro.cxx
Alexander Zaitsev
ну один к одному все концепты\трейты - не уверен. черпать идеи - определенно можно и нужно
ну грубо говоря, как соотносятся концепты и трейты? Можно сказать что концепт - своего рода "lazy" трейт. Простой фичей языка можно потребовать от класса выполнение концепта:
static_assert(some_concept<MyClass>);
по сути переводя его из lazy в eager для конкретного класса.
источник

A

Alex in pro.cxx
magras
Или это только при автоматическом выводе типа?
вроде бы нет проблем: https://godbolt.org/z/XrM2Dr
источник

АР

Андрей Руссков... in pro.cxx
можно даже ввести сахарок а-ля
class MyClass : some_concept { ... // требуем от класса удовлетворение концепта
источник

АК

Александр Караев... in pro.cxx
Андрей Руссков
можно даже ввести сахарок а-ля
class MyClass : some_concept { ... // требуем от класса удовлетворение концепта
class MyClass requires some_concept {
источник

АР

Андрей Руссков... in pro.cxx
собственно остается только один простой шаг: сделать особый вид концептов, который можно будет использовать только в eager манере и voila: мы получили трейты в с++
источник

АР

Андрей Руссков... in pro.cxx
Александр Караев
class MyClass requires some_concept {
источник

АР

Андрей Руссков... in pro.cxx
Андрей Руссков
собственно остается только один простой шаг: сделать особый вид концептов, который можно будет использовать только в eager манере и voila: мы получили трейты в с++
допустим можно будет назвать их "explicit" концептами
источник

ДЛ

Дмитрий ⬡ Лапшин... in pro.cxx
Андрей Руссков
и так перегрузки сильно нагружают компиляцию, а создание правил перегрузки по возвращаемому значению и резолвинг этого всего зоопарка попросту взорвет времена компиляции
Именно поэтому не агитирую.
источник

m

magras in pro.cxx
magras
Или это только при автоматическом выводе типа?
Оказалось с точностью до наоборот: если помещаемся в [unsigned] int, размер enum'а не должен превышать [unsigned] int. Это все имеет значение только для unscoped enums без явно заданного underlying типа.

https://eel.is/c++draft/dcl.enum#7
источник

AT

Anatoly Tomilov in pro.cxx
Rажется сахарок совсем уж незначительный. Можно ведь в скоупе класса прямо написать static_assert.
источник

АР

Андрей Руссков... in pro.cxx
кажется, класс должен быть завершен перед static_assert
источник

АР

Андрей Руссков... in pro.cxx
вообще вопрос не в значительности сахарка а в том что нам дают трейты по сравнению с концептами
источник

m

magras in pro.cxx
Андрей Руссков
вообще вопрос не в значительности сахарка а в том что нам дают трейты по сравнению с концептами
Ну в расте они используются в том числе для runtime полиморфизма. Я не уверен, что эта часть легко переносится в плюсы.
источник

АР

Андрей Руссков... in pro.cxx
и мне кажется что если компиляторы кешируют удовлетворение классом концептов (что вероятно), профит просто никакой
источник

АР

Андрей Руссков... in pro.cxx
ну рантайм полиморфизм раста делается через виртуальные классы, тут как бы вообще пофиг
источник