Size: a a a

2020 December 14

A

Alex in pro.cxx
Об этом я не подумал, никогда ещё не пользовался кастомным делитером. Спасибо за идею.
источник

АК

Александр Караев... in pro.cxx
Alex
Об этом я не подумал, никогда ещё не пользовался кастомным делитером. Спасибо за идею.
template <class... Args>
std::unique_ptr<void, void(*)(void*)> erase_type(std::function<void(Args...)> f) {
 using f_t = std::function<void(Args...)>;
 return std::unique_ptr<void, void(*)(void*)>(new f_t(std::move(f)), [](void* ptr) {
   delete static_cast<f_t*>(ptr);
 });
}


как-то так
источник

ID

In Dev in pro.cxx
У std::function невиртуальный деструктор, наследоваться он него идея так себе, разве нет? Я правда не знаю как это все отработает при удалении по DummyBaseType
источник

A

Alex in pro.cxx
Как я себе представляю, вызовется виртуальный деструктор конкретного типа, а он должен уничтожить базовый класс. Собственно, именно поэтому я и спросил, корректно ли это, других проблем не вижу в своём изобретении
источник

A

Alex in pro.cxx
Александр Караев
template <class... Args>
std::unique_ptr<void, void(*)(void*)> erase_type(std::function<void(Args...)> f) {
 using f_t = std::function<void(Args...)>;
 return std::unique_ptr<void, void(*)(void*)>(new f_t(std::move(f)), [](void* ptr) {
   delete static_cast<f_t*>(ptr);
 });
}


как-то так
Спасибо за пример!
источник

m

magras in pro.cxx
Alex
а я перед вызовом сделаю каст к std::function*, потому что в месте вызова я знаю полный тип, но не знаю его в месте удаления этого объекта
Может просто взять std::any и класть в него std::function?
источник

A

Alex in pro.cxx
а чем это лучше указателя? Не будет динамического выделения памяти?
источник

АК

Александр Караев... in pro.cxx
magras
Может просто взять std::any и класть в него std::function?
кстати да, мой пример с unique_ptr - это any "на минималках" - костыль
источник

НТ

Николай Тихонов... in pro.cxx
Alex
а чем это лучше указателя? Не будет динамического выделения памяти?
std::unique_ptr, при вызове его деструктора, освобождает память, т.е. делает это автоматически при выходе из поля видимости
источник

НТ

Николай Тихонов... in pro.cxx
auto pszCmdLine = std::make_unique<wchar_t[]>(MAX_PATH);
 StringCchPrintfW(pszCmdLine.get(), MAX_PATH,
   L"\"%s\" \"%s\\CroBank.dat\"",
   s_CroReader.c_str(), GetPath());
источник

НТ

Николай Тихонов... in pro.cxx
супер кайф
источник

A

Alex in pro.cxx
Николай Тихонов
std::unique_ptr, при вызове его деструктора, освобождает память, т.е. делает это автоматически при выходе из поля видимости
Ну да, это желаемое поведение, так же, как если бы вместо указателя был просто инстанс (по значению). Единственный минус - требует динамического выделения, которое больше ни для чего в моём случае не нужно, кроме как для type erasure.
источник

НТ

Николай Тихонов... in pro.cxx
Alex
Ну да, это желаемое поведение, так же, как если бы вместо указателя был просто инстанс (по значению). Единственный минус - требует динамического выделения, которое больше ни для чего в моём случае не нужно, кроме как для type erasure.
зачем аж до type erasure?
источник

НТ

Николай Тихонов... in pro.cxx
надо сбавить обороты
источник

A

Alex in pro.cxx
?
источник

НТ

Николай Тихонов... in pro.cxx
источник

IZ

Ilia Zviagin in pro.cxx
Переслано от whyamsx
Подскажите пож кто шарит за либы или что-то такое что упростит мне создание WebSocket КЛИЕНТА где подключение идёт конкретно по wss:// а не ip и порту.
Суть в том, что я не силен в плюсах и у меня есть готовое решение на NodeJS, хотел бы просто скомпилировать это, но ноду в экзешник не впаять поэтому вот к таким выводам я пришел..
источник

НТ

Николай Тихонов... in pro.cxx
Ilia Zviagin
Переслано от whyamsx
Подскажите пож кто шарит за либы или что-то такое что упростит мне создание WebSocket КЛИЕНТА где подключение идёт конкретно по wss:// а не ip и порту.
Суть в том, что я не силен в плюсах и у меня есть готовое решение на NodeJS, хотел бы просто скомпилировать это, но ноду в экзешник не впаять поэтому вот к таким выводам я пришел..
boost::asio
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
а чем это лучше указателя? Не будет динамического выделения памяти?
Не будет стрёмного наследования + value semantic вместо pointer
источник

ПК

Побитый Кирпич... in pro.cxx
wchar_t pszCmdLine[MAX_PATH] делает то же самое, только без дин. аллокации. Так что у тебя  плохой пример
источник