template <class T> struct _init_ : T{ void* operator new( size_t, T* Ptr ) { return Ptr; } void operator delete( void* ) { } void operator delete( void*, T* ) { }};#define CONSTRUCT( type, ptr, args ) ( (void) new(ptr) _init_<type> args )#define DESTRUCT( type, ptr ) ( delete _init_<type> )class Foo{ Foo( int, int ); ....};....CONSTRUCT( Foo, pFoo, (1,2) );
Is there any way around? Or do I have to write this stupid code?
template <class T> struct _init_{ T Data; _init_() : Data() {} template <class A1> _init_( A1 a1 ) : Data(a1) {} template <class A1, class A2> _init_( A1 a1, A2 a2 ) : Data(a1, a2) {} template <class A1, class A2, class A3> _init_( A1 a1, A2 a2, A3 a3 ) : Data(a1, a2, a3) {} .... void* operator new( size_t, T* Ptr ) { return Ptr; } void operator delete( void* ) { } void operator delete( void*, T* ) { }};
[Edited by - 1hod0afop on July 8, 2008 9:55:25 AM]