Denis
А с объявлениями двух и более переменных на одной строке — когда ты вносишь изменения в имя переменной, её инициализатор или тип — у тебя в системе контроля версий будет вся строчка подсвечена как модифицированная.
Denis
Ну, да, согласен, что вкусовщина. Просто вкус бывает хороший и плохой. Хороший создаёт меньше проблем такого рода как я выше описал.
Oleg
Вкусовщина — это если нет практических проблем.
если из-за стиля у тебя практические проблемы, то у меня для тебя плохие новости
Ender
Лол
Denis
>переход на личности
Denis
Люблю здоровые дискуссии.
Denis
Дальше по накатанной, да? У тебя из-за стиля тоже могут быть практические проблемы, а если ты этого не знаешь, то у меня для тебя плохие новости.
Igor
https://github.com/pyk/cmake-tutorial
https://pabloariasal.github.io/2018/02/19/its-time-to-do-cmake-right/ ещё вот годнота подъехала
Крылатый
Главное, не страдать хернёй типа int* foo, bar;
Berkus
Ну вот я так и хочу. А то тут говорят три раза запускать надо
github.com/metta-systems/metta смотри как сделан цмак. Доеду до компа подробней расскажу
Ender
Главное, не страдать хернёй типа int* foo, bar;
Херня типа инт может доставить проблем.
Крылатый
Поэтому лучше shared_ptr<int> foo, bar; ;P
Ender
:D
Denis
::enable_shared_from_this до сих пор актуально?
Ildar
А точно ли тебе там нужен шаред? Мб unique_ptr хватило бы
Крылатый
Но всё от задач.
Ildar
Это да
Ender
Всем auto_ptr
Berkus
Всем auto_ptr
Давно убрано из стандарта
Denis
Да а что
Когда наткнулся на это в когда-то давно было очень неудобно — надо было отдавать shared_ptr из this в теле наследников, а shared_ptr был от базового типа.
Denis
Точно не помню, но как-то это всё было неудобно. Думал может что лучше завезли.
Ender
C++11 работает. Возможно уже есть тонны легаси-говнокода с этим.
Ender
А давно - это в прошлом году.
Ildar
давно сказали не использовать его
Ildar
Он с C++11 в deprecated
Denis
Что? Если "переход на личности" в дискуссии — это больная мозоль, то да.
Denis
А предметно — нет.
Berkus
Точно не помню, но как-то это всё было неудобно. Думал может что лучше завезли.
Все это нормально работает если уметь пользоваться. Добавь к esft еще crtp и будет норм
Ender
А ничего.
Matwey
Хочу более прямой unique_ptr
Matwey
Сейчас не очень удобно использовать указатель на функцию в качестве Deleter-а
Matwey
Который и так уже является частью типа
Matwey
Можно было бы туда просто запихать указатель на функицю (а он может быть аргументом шаблона) и избежать использования еще одного указателя под Deleter и необходимости безумной инициализации каждый раз одним и тем же значением
Matwey
Может конечно я им как-то не так пользуюсь
Matwey
Хотя, я понял
Matwey
Нужно сделать обертку дополнительную
Matwey
Вокруг указателя
Matwey
В каком классе?
Matwey
Нет, спасибо, с ним всё ок
Matwey
Я имею ввиду, что в любой C-щной библиотеке или SDK будет один и тот же паттерн: myhandle* new_resource(); free_resource(myhandle*) Вот этот myhandle очень удобно оборачивать в unique_ptr и там хранить. Потому-что класс, который его инкапсулирует, сразу становится некопируемым автоматически, ресурс всегда освободится при стандартном деструкторе. Итого: для правильного поведения не нужно помнить как минимум две вещи.
Anatoly
// // вспомогательный тип для скопгарда обеспечивающего управление HINTERNET хендлерами // typedef std::unique_ptr<typename std::remove_pointer<HINTERNET>::type, void(*)(HINTERNET)> InternetHandlerHolder; по типу?
Matwey
Так я и говорю о том, как я делаю wrapper-класс. Вместо unique_ptr<myhandle, decltype(&free_resource) x{new_resource(..), &free_resouce} хочу чтобы было так unique_ptr<myhandle, my_deleter<&free_resource> > x(new_resource(..));
Matwey
Только my_deleter нужно занести в STL, чтобы каждый раз его не переизобретать
Matwey
где my_deleter тривиально реализуется - ничего не хранит, а в функции operator()(T*) зовет шаблонный аргумент указателя на функцию.
Matwey
Может. Но зачем? Чтобы я забыл его написать однажды?
Matwey
В отличии от чего?
Matwey
unique_ptr то как раз автоматом всё почистит
Berkus
Охуенная штука во враппер классе
Berkus
unique_ptr то как раз автоматом всё почистит
Так у тебя к нему претензии
Berkus
Которые решаются враппер классом легко
Berkus
И там еще ништяков добавляется
Matwey
Которые решаются враппер классом легко
Не, я не понял. Ты либо предлагаешь мне иметь два враппер класса. Либо предлагаешь мне делать что-то руками.
Vladislav
нужно по одному враппер-классу на тип ресурса
Vladislav
иначе можно в один прекрасный день забыть прописать deleter
Matwey
Руками надо соорудить весь мой класс который будет хранить голый myhandler* очевидно. А так же не забыть потереть ему операторы копирования и написать ему десткруктор.
Matwey
Я не хочу руками их определять
Matwey
Именно
Matwey
Я стремлюсь к тому, чтобы компиляторы за меня программировали
Matwey
Мне это дело уже давно надоело и не приносит удовольствия
Anatoly
где my_deleter тривиально реализуется - ничего не хранит, а в функции operator()(T*) зовет шаблонный аргумент указателя на функцию.
ну, тебе не хватает в C++ что-то вроде: template<typename T, typename F> auto make_holder(T* resource, F deletor) { return std::unique_ptr<T, F>(resource, std::move(deletor)); } int main() { auto fh = make_holder(fopen("test.txt", "r"), [](FILE * h){fclose(h);}); return 0; } ?
Anatoly
плюсану, поскольку работая с WINAPI всегда городишь что-то вроде приведеленного выше
Anatoly
раньше холдеры писали, теперь можно обойтись unique_ptr
Matwey
плюсану, поскольку работая с WINAPI всегда городишь что-то вроде приведеленного выше
Ну так и я говорю, положите уже мне этот велосипед в STL. А мне говорят, пиши сам каждый раз, ведь это так просто.
DZ
ребят дайте пожалуйста пример opensource проекта dll/so с cmake и чтоб в этом репозитории также лежали примеры использования тоже с cmake завязанные и тестами.. очень надо )
DZ
чтоб по возможности был конвертируем в VS проект )
Anatoly
а вот пример включения gtest