Size: a a a

2020 October 11

KA

Kirill 🍥 Andriyanov... in pro.cxx
Max Ziua
reinterpret_cast<T*>(&storage)
я не хочу получить указатель на storage, приведëнный к T*
я хочу получить указатель, который сохранил внутри storage, приведëнный к T*
источник

DV

Denis Vorkozhokov in pro.cxx
Kirill 🍥 Andriyanov
я не хочу получить указатель на storage, приведëнный к T*
я хочу получить указатель, который сохранил внутри storage, приведëнный к T*
*reinterpret_cast<T**>(&storage) :)
источник

KA

Kirill 🍥 Andriyanov... in pro.cxx
Denis Vorkozhokov
*reinterpret_cast<T**>(&storage) :)
clang не компилирует
источник

SE

Stanislav Ershov in pro.cxx
Denis Vorkozhokov
*reinterpret_cast<T**>(&storage) :)
источник

AK

Andrei K in pro.cxx
Denis Vorkozhokov
*reinterpret_cast<T**>(&storage) :)
Это точно неверно.
источник

AK

Andrei K in pro.cxx
Там понадобится два каста.
источник

AK

Andrei K in pro.cxx
Первый реинтерпрет к поинтеру, затем разыменование, затем второй статик void* к T*
источник

АК

Александр Караев... in pro.cxx
Коллеги, какая нынче ситуация с макросами и модулями? Если я правильно понял, макросы невозможно экспортировать из модуля. Это так? И как быть, если мне всё-таки это очень необходимо?
источник

NP

Nikita Provotorov in pro.cxx
Александр Караев
Коллеги, какая нынче ситуация с макросами и модулями? Если я правильно понял, макросы невозможно экспортировать из модуля. Это так? И как быть, если мне всё-таки это очень необходимо?
не юзать модули?
источник

NP

Nikita Provotorov in pro.cxx
кста интересно шо будет делать например тот же GoogleTest
источник

АК

Александр Караев... in pro.cxx
Nikita Provotorov
кста интересно шо будет делать например тот же GoogleTest
Я о том же
источник

NP

Nikita Provotorov in pro.cxx
ну наверное просто не будут юзать модули))
источник

m

magras in pro.cxx
Александр Караев
Коллеги, какая нынче ситуация с макросами и модулями? Если я правильно понял, макросы невозможно экспортировать из модуля. Это так? И как быть, если мне всё-таки это очень необходимо?
Думаю можно сделать хедер с макросами, который будет импортить "не-макросы".
источник

АК

Александр Караев... in pro.cxx
magras
Думаю можно сделать хедер с макросами, который будет импортить "не-макросы".
Не уловил мысль. Допустим я пишу модульную библиотеку, которая предоставляет #define MAKE_VAR(X) int X.
Если я правильно понимаю, то единственный вариант отдать этот макрос пользователю - сделать хедер macro.h и положить макрос туда. Тогда саму библиотеку пользователь будет импортировать как import lib, а если ему нужен макрос, то import "lib/macro.h" - так?
источник

m

magras in pro.cxx
Александр Караев
Не уловил мысль. Допустим я пишу модульную библиотеку, которая предоставляет #define MAKE_VAR(X) int X.
Если я правильно понимаю, то единственный вариант отдать этот макрос пользователю - сделать хедер macro.h и положить макрос туда. Тогда саму библиотеку пользователь будет импортировать как import lib, а если ему нужен макрос, то import "lib/macro.h" - так?
Да, мне кажется мы говорим об одном.

Я имею в виду, что можно только макросы через хедер тащить. Все остальное запаковать в модуль. При этом хедер с макросами может сразу импортить модуль.
источник

АК

Александр Караев... in pro.cxx
magras
Да, мне кажется мы говорим об одном.

Я имею в виду, что можно только макросы через хедер тащить. Все остальное запаковать в модуль. При этом хедер с макросами может сразу импортить модуль.
Ага, понятно. То есть теперь можно явно сказать, какая запись может принести макросы, а какая - нет. В целом, удобно
источник

A

Arelav in pro.cxx
Kirill 🍥 Andriyanov
clang не компилирует
А что он пишет, у меня не получилось воспроизвести
источник

DV

Denis Vorkozhokov in pro.cxx
Arelav
А что он пишет, у меня не получилось воспроизвести
+, у меня с таким кастом всё ок, мб у него не компилит где-то в другом месте...
источник

KA

Kirill 🍥 Andriyanov... in pro.cxx
Arelav
А что он пишет, у меня не получилось воспроизвести
хм, у меня было 2 метода, один для конста
я видимо не заметил что проблема только в том, который константный
но в общем он говорит что я стираю квалификатор
template <typename R, typename... Args>
template <typename T>
T const* storage<R, Args...>::get_dynamic() const noexcept {
   return *reinterpret_cast<T const**>(&buf);
}

buffer
это
storage

/home/kirill/CLionProjects/some_shit.h:199:13: error: reinterpret_cast from 'const inplace_buffer *' (aka 'const std::aligned_storage<8, 8>::type *') to 'const small_func **' casts away qualifiers
   return *reinterpret_cast<T const**>(&buf);
источник

DV

Denis Vorkozhokov in pro.cxx
Kirill 🍥 Andriyanov
хм, у меня было 2 метода, один для конста
я видимо не заметил что проблема только в том, который константный
но в общем он говорит что я стираю квалификатор
template <typename R, typename... Args>
template <typename T>
T const* storage<R, Args...>::get_dynamic() const noexcept {
   return *reinterpret_cast<T const**>(&buf);
}

buffer
это
storage

/home/kirill/CLionProjects/some_shit.h:199:13: error: reinterpret_cast from 'const inplace_buffer *' (aka 'const std::aligned_storage<8, 8>::type *') to 'const small_func **' casts away qualifiers
   return *reinterpret_cast<T const**>(&buf);
Возможно, если у вас storage const, то нужен *reinterpret_cast<T* const*>(&buf)
источник