Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > идиома "postconstructor and predestructor" в с++


Автор: boostcoder 15.1.2011, 17:27
всем привет.
с такой идиомой "познакомился" в Python. так же, говорят что и в F# такое тоже есть. наверняка и в многих других ЯП. но, к сожалению, не в с++.
объяснять что это, и для чего это может понадобиться, полагаю не надо. из названия все понятно.
в гугле по этому направлению ничего не нашел. кроме, этого упоминания: http://www.boost.org/doc/libs/1_45_0/doc/html/signals2/examples.html#signals2.examples.deconstruct

мне интересно, каким образом, минимальными изменением декларации структур/классов, можно навязать некоторому объекту такое поведение.

спасибо.

зы
как такового, вопроса нет. просто размышления..

Автор: GoldFinch 15.1.2011, 18:56
в фабрике после создания объекта можно вызвать "постконструктор", или наследоваться и конструктор наследника будет "постконструктором"
а зачем эта идиома?

Добавлено через 1 минуту и 39 секунд
по теме
http://stackoverflow.com/questions/1151787/is-there-any-automated-way-to-implement-post-constructor-and-pre-destructor-virtu

Автор: mes 15.1.2011, 19:24
Цитата(GoldFinch @  15.1.2011,  17:56 Найти цитируемый пост)
в фабрике после создания объекта можно вызвать "постконструктор", 

 smile, при том под фабрикой подразумевается любой креатор.. 

Цитата(GoldFinch @  15.1.2011,  17:56 Найти цитируемый пост)
 или наследоваться и конструктор наследника будет "постконструктором"

 smile , не будет..


Автор: boostcoder 16.1.2011, 00:18
Цитата(GoldFinch @  15.1.2011,  18:56 Найти цитируемый пост)
в фабрике после создания объекта можно вызвать "постконструктор"

вы говорите о методе, вызываемом руками. это никакой не постконструктор ;)

Цитата(GoldFinch @  15.1.2011,  18:56 Найти цитируемый пост)
а зачем эта идиома?

у вас не бывало ситуаций, когда созданный объект, это не то же самое, что и инициализированный? у меня такое часто встречается. и вызывать методы для инициализации - логически не правильно. нарушается целостность.

Цитата(GoldFinch @  15.1.2011,  18:56 Найти цитируемый пост)
по теме
http://stackoverflow.com/questions/1151787...estructor-virtu

вот этого не нашел. почитаю. спасибо.

Автор: mes 16.1.2011, 00:28
Цитата(boostcoder @  15.1.2011,  23:18 Найти цитируемый пост)
вы говорите о методе, вызываемом руками. это никакой не постконструктор ;)

почему руками ? все это дело можно слегка автоматизировать.. 

Автор: boostcoder 16.1.2011, 00:32
Цитата(mes @  16.1.2011,  00:28 Найти цитируемый пост)
все это дело можно слегка автоматизировать.. 

скажите, есть ли способ это автоматизировать, не сильно нарушая структуру проекта? может наследованием от какого-нибудь базового класса? я пытался - не допёр.
фабрика - не совсем то, т.к. с интеграцией могут возникнуть сложности, не говоря уже о модернизации рабочего кода.

Автор: mes 16.1.2011, 00:35
Цитата(boostcoder @  15.1.2011,  23:32 Найти цитируемый пост)
скажите, есть ли способ это автоматизировать, не сильно нарушая структуру проекта?

думаю нет.. ибо в "чистом виде" это "противоречит "политики С++..

Добавлено через 45 секунд
Цитата(boostcoder @  15.1.2011,  23:32 Найти цитируемый пост)
 может наследованием от какого-нибудь базового класса? 

не наследованием , а оборачиванием... 

Автор: boostcoder 16.1.2011, 00:39
Цитата(mes @  16.1.2011,  00:35 Найти цитируемый пост)
не наследованием , а оборачиванием...

что-то типа:
Код

template<typename T>
struct wrap {
};

...


struct implementation: wrap<implementation> {
};

?

или "оборачиванием" буквально?

Автор: mes 16.1.2011, 00:44
Цитата(boostcoder @  15.1.2011,  23:39 Найти цитируемый пост)
что-то типа:

нет crtp тут не пройдет.. нет внешнего по отношению к конструктору креатора.. 
в простом виде выглядит так :
http://liveworkspace.org/code/8f3dbcca9aa81191df7be5a589cbd9f1



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)