Size: a a a

2020 October 16

A

Alex in pro.cxx
да, и в моём режиме 2а/с++latest это тоже не компилится
источник

АК

Александр Караев... in pro.cxx
Denis Paukaev
всё ещё не понятно, зачем через шаблон это пытаться протащить, а не через параметр конструктора
очень даже понятно
источник

DP

Denis Paukaev in pro.cxx
Александр Караев
очень даже понятно
и что конкретно понятно?
источник

АК

Александр Караев... in pro.cxx
Alex
да, и в моём режиме 2а/с++latest это тоже не компилится
в C++2a/20 оно компилится не потому что внезапно стало можно передавать литералы, а потому что используют хаки https://t.me/ProCxx/402524
источник

A

Alex in pro.cxx
Denis Paukaev
всё ещё не понятно, зачем через шаблон это пытаться протащить, а не через параметр конструктора
ну потому что этот класс, в свою очередь, передаётся дальше уже как шаблонный параметр-тип
источник

АК

Александр Караев... in pro.cxx
Denis Paukaev
и что конкретно понятно?
вот смотри, ты ведь передаёшь в std::array<T, N> целое число в параметр шаблона зачем-то, а не в конструктор, верно?
для массива это нужно, так как число N - это не свойство объекта, а свойство типа. (то, что это число определяет layout типа - просто следствие)
вот иногда строка должна быть свойством типа, "вшита" в него, чтобы работать с ней на уровне типов
источник

АК

Александр Караев... in pro.cxx
мой любимый пример: Property<int, "a"> a;
источник

AF

Aidar Fattakhov in pro.cxx
"a" поди нельзя из-за того чтобы не делать их в стандарте inline
источник

АК

Александр Караев... in pro.cxx
шаблонные параметры класса можно рассматривать как аргументы к конструктору класса (не объекта)
источник

DP

Denis Paukaev in pro.cxx
Александр Караев
в C++2a/20 оно компилится не потому что внезапно стало можно передавать литералы, а потому что используют хаки https://t.me/ProCxx/402524
которые не работают в кланге видимо)
источник

АК

Александр Караев... in pro.cxx
Denis Paukaev
которые не работают в кланге видимо)
да он никак не может осилить: argument deduction not allowed in template parameter
источник

АК

Александр Караев... in pro.cxx
можно посмотреть, как решили проблему здесь: https://github.com/hanickadot/compile-time-regular-expressions
- clang 6.0+ (template UDL, C++17 syntax)
- xcode clang 10.0+ (template UDL, C++17 syntax)
- gcc 7.4+ (template UDL, C++17 syntax)
- gcc 9.0+ (C++17 & C++20 cNTTP syntax)
- MSVC 15.8.8+ (C++17 syntax only) (semi-supported, I don't have windows machine)
источник

PS

Pavel Samolysov in pro.cxx
Александр Караев
вот смотри, ты ведь передаёшь в std::array<T, N> целое число в параметр шаблона зачем-то, а не в конструктор, верно?
для массива это нужно, так как число N - это не свойство объекта, а свойство типа. (то, что это число определяет layout типа - просто следствие)
вот иногда строка должна быть свойством типа, "вшита" в него, чтобы работать с ней на уровне типов
> мой любимый пример: Property<int, "a"> a; Здесь а - это имя свойства?
источник

AF

Aidar Fattakhov in pro.cxx
Александр Караев
да он никак не может осилить: argument deduction not allowed in template parameter
а в стандарте как?
источник

АК

Александр Караев... in pro.cxx
Pavel Samolysov
> мой любимый пример: Property<int, "a"> a; Здесь а - это имя свойства?
да.
хотя это скорее пример того, где удобно использовать строки в параметрах шаблона, но не лучший аргумент в пользу "параметризации" типа
источник

PS

Pavel Samolysov in pro.cxx
Че-то с ходу тоже примеры где надо строку вшивать в тип на ум не приходят. С числом понятнее, всякие small_vector и т.д.
источник

МВ

Макс Воробьев... in pro.cxx
Pavel Samolysov
Че-то с ходу тоже примеры где надо строку вшивать в тип на ум не приходят. С числом понятнее, всякие small_vector и т.д.
генерация каких-нибудь запросов в ct
источник

АК

Александр Караев... in pro.cxx
Pavel Samolysov
Че-то с ходу тоже примеры где надо строку вшивать в тип на ум не приходят. С числом понятнее, всякие small_vector и т.д.
например, ты на типах описываешь схему таблицы в БД - если имена таблиц/полей и прочего будут вшиты в тип, ты сможешь на стадии компиляции валидировать, что пользователь не дурак.

не select("field") с рантайм эксепшеном, а select<"field">() с компайл-тайм ошибкой, если "field" не существует
источник

МВ

Макс Воробьев... in pro.cxx
а можно еще UDA из D стянуть ? ^^
источник

D

Danya in pro.cxx
Александр Караев
например, ты на типах описываешь схему таблицы в БД - если имена таблиц/полей и прочего будут вшиты в тип, ты сможешь на стадии компиляции валидировать, что пользователь не дурак.

не select("field") с рантайм эксепшеном, а select<"field">() с компайл-тайм ошибкой, если "field" не существует
А как компайл-таймово ходить в БД?)
источник