Re: Templates: Template conversions
In article
<1bbef302-c547-436f-bde9-90b68575192c@j22g2000hsf.googlegroups.com>,
Bharath <tiromarch08@gmail.com> wrote:
Hello All,
I was going thru section 13.6.3.1 of Bjarne Stroustrup's The C++
Programming Language (3rd ed.).
Here I have a doubt on the first example of this section (copy pasted
below):
template <class T> class Ptr
{
T* p ;
public :
Ptr (T*);
template <class T2> operator Ptr <T2> (); // convert Ptr<T> to
Ptr<T2>
// ...
};
I couldn't understand the below line in above example.
template <class T2> operator Ptr <T2> (); // convert Ptr<T> to Ptr<T2>
Can someone please explain what author is trying to achieve with above
line of code?
First of all, I couldn't understand after "operator" how a class name
can come (though this seems to be operator overloading ?)
Thanks in adv.
first of all
struct B{};
struct A
{
B b;
operator B() {return b;}
};
what operator does is provide a conversion from A to B;
That is
A x;
B y;
y = x; // converts z to a B and stores in y. without operator
B() above this is an illegal assignment of between different types.
the templated example you quoted provides a conversion from
Ptr<T1> to Ptr<T2> problably assuming a T1* is convertable to a T2*
example
class A{};
class B:A{};
A *a;
B *b;
Ptr<A> pa(a)
Ptr<B> pb(b);
Ptr<A) pc(0);
now since B derives from A a B * is an A *. Ptr<A> and Ptr<B> do not
provide this conversion, if template <class T2> operator Ptr<T1>() is
not provided, since it is
both pc = pa and pc = pb are allowed as would be the conversion of
plain pointers since B is derived from A.
if you have two user defined types A and B and you want implicit
conversion from A to B A needs an A::operator B();
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]