Я пытаюсь написать operator
, который конвертирует между разными типами одной и той же реализации. Это пример кода:
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;
}
Однако для строки u.m_a = m_a;
это выдает следующую ошибку.
Ошибка 2, ошибка C2248: «A :: m_a»:
не может получить доступ к объявленному приватному члену
в классе
'A' d: \ VC ++ \ Vs8Console \ Vs8Console \ Vs8Console.cpp 30 Vs8Console
Я понимаю, что ошибка в том, что A<U>
совершенно другого типа, чем A<T>
. Есть ли какой-нибудь простой способ решить эту проблему (возможно, с помощью друга?), Кроме предоставления методов установки и получения? Я использую Visual studio 2008, если это имеет значение.