Conversion between different template instantiation of the same template

Posted by Naveen on Stack Overflow See other posts from Stack Overflow or by Naveen
Published on 2010-06-04T12:15:50Z Indexed on 2010/06/05 14:02 UTC
Read the original article Hit count: 186

Filed under:
|
|

I am trying to write an operator which converts between the differnt types of the same implementation. This is the sample code:

template <class T = int>
class A
{
public:
    A() : m_a(0){}

    template <class U>
    operator A<U>()
    {
        A<U> u;
        u.m_a = m_a; 
        return u;
    }
private:
    int m_a;
};

 int main(void)
{
    A<int> a;
    A<double> b = a;
    return 0;
}

However, it gives the following error for line u.m_a = m_a;.

Error 2 error C2248: 'A::m_a' : cannot access private member declared in class 'A' d:\VC++\Vs8Console\Vs8Console\Vs8Console.cpp 30 Vs8Console

I understand the error is because A<U> is a totally different type from A<T>. Is there any simple way of solving this (may be using a friend?) other than providing setter and getter methods? I am using Visual studio 2008 if it matters.

© Stack Overflow or respective owner

Related posts about c++

Related posts about templates