?

Log in

No account? Create an account

Прораб перестройки - Общество дровосеков Бердичева по изучению Мишны

Jun. 19th, 2013

08:47 pm - Прораб перестройки

Previous Entry Share Next Entry


template <class T, typename... Args>
void Perestroika(T & obj, Args&&... args) {
        (&obj)->~T();
        new (&obj) T(args...);
}

Comments:

[User Picture]
From:boris71
Date:June 20th, 2013 04:00 am (UTC)
(Link)
Велики шансы, что в скорости мне придется программировать на С++11...
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 20th, 2013 04:04 am (UTC)
(Link)
А мне (в production) - еще нескоро.
(Reply) (Parent) (Thread)
[User Picture]
From:vaddimka
Date:June 20th, 2013 04:20 am (UTC)
(Link)
да, это он и есть

но, вообще, пока от него больше вреда чем пользы
gcc его вполне сносно поддерживает, но ms compiler, даже последние апдейты, достаточно посредственно, причем, в достаточно неожиданных местах (типа вот этих вот variadic templates)

разработчики стараются понатыкать лямбд куда ни попадя, везде мешанина из старого кода с boost::shared_ptr и прочего с новым кодом с std::shared_ptr
auto умудряется снижать читабельность кода :)

в итоге, мы попробовали на одном проекте, но очевидных плюсов лично я не увидел
совсем новые проекты, как компиляторы допилят, вполне вероятно будет удобно на С++ сразу писать, в старых же пока удобнее все то же самое делать через boost
(Reply) (Parent) (Thread)
[User Picture]
From:lider
Date:June 20th, 2013 05:00 am (UTC)
(Link)
(imho) Reincarnation

Edited at 2013-06-20 05:00 am (UTC)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 20th, 2013 06:02 am (UTC)
(Link)
Я б называл reincarnation случай, когда обходятся без деструктора, что-нибудь типа new (&obj) T(std::move(obj), args...)
а модифицирующий move-конструктор проверяет на равенство адреса первого аргумента и this.
(Reply) (Parent) (Thread)
[User Picture]
From:fatoff
Date:June 20th, 2013 05:12 am (UTC)
(Link)
Ну что, красиво, взял любой объект, и in-place его перестроил. Только слегка confusing, довольно часто мы в больших системах закладываем логику, которая полагает, что у объекта есть life-cycle. А тут, на те, генной инженерией обновили внутренности. :-p
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 20th, 2013 06:09 am (UTC)
(Link)
Частый частный случай (reset) - с дефолтным конструктором. Это фактически то же самое, что и swap с временным объектом, но зато работает даже для тех классов, которые запрещают присваивание.
(Reply) (Parent) (Thread)
[User Picture]
From:ygam
Date:June 20th, 2013 05:19 am (UTC)
(Link)
Это C++11, что ли?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 20th, 2013 06:02 am (UTC)
(Link)
Ну да.
(Reply) (Parent) (Thread)
[User Picture]
From:solomon2
Date:June 20th, 2013 05:31 am (UTC)
(Link)
Просто, изящно, невменямо...
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 20th, 2013 06:03 am (UTC)
(Link)
Ну уж прям невменямо.
(Reply) (Parent) (Thread)
[User Picture]
From:solomon2
Date:June 20th, 2013 06:25 am (UTC)
(Link)
С++ в своем развитии все более уподобляется франкенштейновскому монстру.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:June 20th, 2013 06:52 am (UTC)
(Link)
Зато силища какая!
(Reply) (Parent) (Thread)
[User Picture]
From:sasha_gil
Date:June 20th, 2013 07:22 am (UTC)
(Link)
Кстати, попалась сегодня ссылка на такой фокус:
http://ideone.com/P5Xrvk
-- динамическая смена подтипа (при условии, что в подтипах поля не добавляются, конечно)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:June 20th, 2013 07:38 am (UTC)
(Link)
Я это когда-то давно (поиск выявил 2002 год) придумал независимо, и, что характерно, мой пример был тоже с кошкой и собакой. А идея с фальшивым template пригодится, спасибо.
(Reply) (Parent) (Thread)
[User Picture]
From:dvv
Date:June 20th, 2013 01:12 pm (UTC)
(Link)
А кто контролирует, что они не добавляются?
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:June 20th, 2013 03:52 pm (UTC)
(Link)
А кто контролирует reinterpret_cast?
(Reply) (Parent) (Thread)
[User Picture]
From:dvv
Date:June 20th, 2013 04:04 pm (UTC)
(Link)
Ну да, вот же я и щелкаю…
(Reply) (Parent) (Thread)