Re: Const constructor
On Jun 21, 1:49 pm, Fabio <fabio.canni...@gmail.com> wrote:
Instead of using built-in pointer you can define your own smart
pointer that propagates const from pointer to the pointee. For
example following Marco Manfredini's suggestion:
http://groups.google.com/group/comp.lang.c++.moderated/browse_frm/thr...
template<class T>
class aggregated
{
T * value
public :
T const * operator -> ( ) const { return value ; }
T * operator -> ( ) { return value ; }
...
} ;
Thus making "T * const" propagate to "T const * const".
This is quite nice. However it still leaves the problem of
inizialization, where the source is a const T*.
So const_cast would still be needed, is it?
Sorry, I don't know what problem you are referring to. Please
post a minimal example showing the problem. If you mean the op:
int x = 3 ;
const int * p = &x ;
A a(p) ; // this is not const, but it still compiles!!!
I would be writing
int x = 3 ;
const int * p = &x ;
aggregate<int const> a(p) ;
instead (since in that code I know at the point of instantiating
a that I'm instantiating it with T const *). Note that <T const>
applies to any smart pointer. The purpose of the aggregate class
above is to give the following behavior
aggregate<int> a(p) ;
*a = 5 ; // ok just as int *
...
aggregate<int> const ac(a) ;
*ac = 7 ; // compile error just as int const *
But hopefully you have some minimal realistic cleaned up example
of exactly the problem you are trying to solve. Anyhow, I do not
see a need for const_cast anywhere in the examples above.
KHD
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]