Re: [Algorithms] C++ inherited constructors
Brought to you by:
vexxed72
|
From: <ma...@ci...> - 2000-07-18 11:48:44
|
You can always make the ctor throw an exception, which is an acceptable form
of error handling in this case.
Matt, I think the solution to the problem is to add another constructor to
your main-threadloop-class and your CThread which take an existing thread
handle, e.g.:
class MainThreadLoop
{
MainThreadLoop(HANDLE hThread) : CThread(hThread) /*, m_x(0)*/{/*etc*/}
};
class CThread
{
CThread() { /* create a thread */ }
CThread(HANDLE hThread) { /* use given thread */ }
/* or: CThread(HANDLE hThread=0)
{
if (hThread==0) { hThread = CreateThread(...); }
} */
};
WinMain(...)
{
MainThreadLoop MainLoop(GetCurrentThread());
}
-=Mark=-
Mark Atkinson, Technical Director, Computer Artworks Ltd.
http://www.artworks.co.uk
> That, together with the fact that constructors can't return error codes
> (only throw exceptions) when something goes wrong, has me following a very
> simple design heuristic ever since I can remember: Don't make a
> constructor
> do anything other than initializing member variables. In other words,
> don't
> let it do anything that can go wrong. Put that code (for example the
> thread
> creation code in your case) in another method that has to be called after
> construction. If you had done that when you designed the CThread class,
> you
> wouldn't have a problem.
> --
> --Adam Moravanszky
> http://www.n.ethz.ch/student/adammo
>
> -----Original Message-----
> From: Matt Adams <de...@gm...>
> To: gda...@li...
> <gda...@li...>
> Date: Saturday, July 15, 2000 1:19 PM
> Subject: Re: [Algorithms] C++ inherited constructors
>
>
> >I need this for aesthetic reasons :)
> >I've got an abstract CThread class. If a want to create a new thread, I
> >build my process class and inherit CThread, which creates a new thread by
> >construction.
> >Now I want my main-threadloop-class to inherit CThread, too, to provide
> all
> >the thread functionality to my main thread. But that thread already
> exists
> > created by compiler ), and shouldn't be created again by CThread.
> >Of course I can put CThread () and ~CThread () in functions like Create()
> >and Destroy() and leave the constructor / destructor empty. But it'd be
> >nicer if it could be done in another way...
> >
> >----- Original Message -----
> >From: Favnir
> >To: gda...@li...
> >Sent: Saturday, July 15, 2000 1:32 PM
> >Subject: Re: [Algorithms] C++ inherited constructors
> >
> >The only way you can do this is to define a (preferably) protected
> >do-nothing constructor for the base class, and inherit it in the subclass
> >constructor.
> >
> >But, why in the world would you need to do this, in the first place?
> >
> >Are,
> >F
> >
> >----- Original Message -----
> >From: Matt Adams
> >To: gda...@li...
> >Sent: Saturday, July 15, 2000 12:22 PM
> >Subject: [Algorithms] C++ inherited constructors
> >
> >
> >Hi,
> >
> >I got a question about the C++ class hierarchy.
> >
> >class a
> >{
> > a () {...}; // constr a
> >};
> >
> >class b : a
> >{
> > b () {...}; // constr b
> >};
> >
> >b instance;
> >
> >When creating an instance of b, constructors for both class a and class b
> >are called.
> >Is there a way to suppress the automatic calling of constructor a ?
> >Or something like 'overloading' the old constructor by a new one ?
> >I couldn't find anything like that in the compiler docs.
> >
> >Any help appreciated,
> >Matt
> >
> >
> >_______________________________________________
> >GDAlgorithms-list mailing list
> >GDA...@li...
> >http://lists.sourceforge.net/mailman/listinfo/gdalgorithms-list
> >
> >
> >_______________________________________________
> >GDAlgorithms-list mailing list
> >GDA...@li...
> >http://lists.sourceforge.net/mailman/listinfo/gdalgorithms-list
>
>
> _______________________________________________
> GDAlgorithms-list mailing list
> GDA...@li...
> http://lists.sourceforge.net/mailman/listinfo/gdalgorithms-list
>
>
|