Size: a a a

2020 November 13

EK

Egor Kuzmin in pro.cxx
@AndreiKei, @unterumarmung. Общая задача в том, что нужно помечать строки в логе. Если лог привязан к сообщению, то берется его uuid, размер равен 36. Если к определенной обработке, то уже указывается произвольная строка. Дальше они складывается в массив на стеке. Как вариант, можно ограничить допустимую длину и выделять массив с запасом, но хотел красивое решение.
источник

АК

Александр Караев... in pro.cxx
Andrei K
Нет, я не про этот билтын. Я про задачу, которую автор пытается решить. Может быть на решается иначе.
вот я могу сформулировать задачу:
я хочу функцию, которая для constexpr входной string_view будет копировать её значение в std::array фиксированного размера, а для runtime - создавать vector динамического размера.
оба контейнера в дальнейшем куда-то передаются для каких-то "владеющих" целей

прям подходит под описание @egorspk
источник

D

Danya in pro.cxx
Александр Караев
вот я могу сформулировать задачу:
я хочу функцию, которая для constexpr входной string_view будет копировать её значение в std::array фиксированного размера, а для runtime - создавать vector динамического размера.
оба контейнера в дальнейшем куда-то передаются для каких-то "владеющих" целей

прям подходит под описание @egorspk
Кажется нужен fixed_string
Хотя особо проблему он не решит
источник

d

disba1ancer in pro.cxx
Ioann_V
Ребята у меня странный вопрос в виду не очень понятного бага в коде - спин локи, они на видимость переменных в других потоках которые меняются внутри блокировки - влияют?
А что имеется ввиду под видимостью?
источник

I

Ioann_V in pro.cxx
disba1ancer
А что имеется ввиду под видимостью?
Меняем в одном потоке - видим изменение в другом
источник

AK

Andrei K in pro.cxx
Александр Караев
вот я могу сформулировать задачу:
я хочу функцию, которая для constexpr входной string_view будет копировать её значение в std::array фиксированного размера, а для runtime - создавать vector динамического размера.
оба контейнера в дальнейшем куда-то передаются для каких-то "владеющих" целей

прям подходит под описание @egorspk
Ну вот тут проблема именно что констэкспровых аргументов не бывает. Но это дико-дико сложно поддержать. Я писал компилятор для кастомного языка где всё по умолчанию объявлено констэкспр, матчинг функций это очень сложно.
источник

АК

Александр Караев... in pro.cxx
Danya
Кажется нужен fixed_string
Хотя особо проблему он не решит
он не решит проблему детекта рантайма/компайл-тайма.
точнее.. вызывающей стороне придётся выбирать между f<"123">() и f("123"), а не универсально f("123")
источник

d

disba1ancer in pro.cxx
Ioann_V
Меняем в одном потоке - видим изменение в другом
Это про данные которые защищаются спинлоком?
источник

I

Ioann_V in pro.cxx
Да. Вопрос будет так или нет.
источник

АК

Александр Караев... in pro.cxx
Andrei K
Ну вот тут проблема именно что констэкспровых аргументов не бывает. Но это дико-дико сложно поддержать. Я писал компилятор для кастомного языка где всё по умолчанию объявлено констэкспр, матчинг функций это очень сложно.
я понимаю, что это сложно.
сам читал много на тему constexpr аргументов и очень печально, что простых решений не находится
источник

d

disba1ancer in pro.cxx
Ioann_V
Да. Вопрос будет так или нет.
А какой спинлок?
источник

D

Danya in pro.cxx
Александр Караев
он не решит проблему детекта рантайма/компайл-тайма.
точнее.. вызывающей стороне придётся выбирать между f<"123">() и f("123"), а не универсально f("123")
template <size_t N>
void foo(fixed_string<N>);

void foo(std::string_view);
источник

AK

Andrei K in pro.cxx
Ioann_V
Ребята у меня странный вопрос в виду не очень понятного бага в коде - спин локи, они на видимость переменных в других потоках которые меняются внутри блокировки - влияют?
В общем случае, если фенсы не стоят — то не обязательно.
источник

I

Ioann_V in pro.cxx
well
источник

I

Ioann_V in pro.cxx
thx
источник

AK

Andrei K in pro.cxx
Или речь про стандартный какой-нибудь объекта спинлока из апи ОС?
источник

АК

Александр Караев... in pro.cxx
Danya
template <size_t N>
void foo(fixed_string<N>);

void foo(std::string_view);
но так у тебя constexpr только размер строки, а не сама строка.
но да, это решает задачу, которую я сформулировал :)
источник

I

Ioann_V in pro.cxx
Мне подойдет общий случай.
источник

AK

Andrei K in pro.cxx
Там будут фенсы стоять. А если спинлок самописный типа volatile int, то он конечно не сработает.
источник

D

Danya in pro.cxx
Александр Караев
но так у тебя constexpr только размер строки, а не сама строка.
но да, это решает задачу, которую я сформулировал :)
Егору вроде требовалось только размер констэкспровый
источник