Re[3]: Вот, добрался до компилятора...
От: Erop Россия  
Дата: 05.07.09 19:58
Оценка: 6 (1) +1
Здравствуйте, pastey, Вы писали:

P>Супер — спасибо большое — выглядит очень классно, особенно первое.

P>Второе тоже ничего, но на ран-тайм откладывать не хочется — пропустим какой-то редко используемы случай и кирдык.
P>Завтра испытаю — отпишусь, сейчас под рукой нет компилятора.

//     Объект, который нельзя создать, иначе чем встроенной в него фабрикой...
class IDynCreatedObject {
public:
    virtual ~IDynCreatedObject() {}
    template<typename TDynCreatedObject> static TDynCreatedObject* CreateNew() 
        { return new objectPlaceholder<TDynCreatedObject>; }
    template<typename TDynCreatedObject> static TDynCreatedObject* CreateCopyOf( const TDynCreatedObject& toClone ) 
        { return new objectPlaceholder<TDynCreatedObject>( toClone ); }
    template<typename TDynCreatedObject> static TDynCreatedObject* CreateNew( TDynCreatedObject*& toInit ) 
        { return toInit = CreateNew<TDynCreatedObject>(); }

private:
    class secretSeed {};
    virtual secretSeed checkSecretSeed( secretSeed ) = 0;
    template<typename TDynCreatedObject>
    struct objectPlaceholder : TDynCreatedObject { 
        objectPlaceholder() {}
        objectPlaceholder( const TDynCreatedObject& other ) : TDynCreatedObject( other ) {}
        
        secretSeed checkSecretSeed( secretSeed ss ) { return ss; }
    };
};

#endif//!DynCreatedObject_h
это VC2008 типа.

пример использования:
struct testDCO : IDynCreatedObject {
//    secretSeed checkSecretSeed( secretSeed ss ) { return ss; }
};

struct testTestDCO {
//    testDCO forbiddenField;
};

void testIDynCreatedObject ()
{
//    delete new testDCO;
//    testDCO autoObj;
    testDCO* obj = testDCO::CreateNew(obj);    //    Тут нет UB, так как возврат из функции -- точка следования!
    delete obj->CreateCopyOf( *obj );
    delete obj;
}
закомментированные строчки не компилируются...

В принципе, возможно, будет удобно сразу скрестить это с этим
Автор: Erop
Дата: 26.04.08
...
Но это уже как приложится и что на самом деле нужно

Пиши в общем чего и в какой форме пригодилось...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.