【发布时间】:2010-06-04 12:15:50
【问题描述】:
我正在尝试编写一个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> 是完全不同的类型。除了提供 setter 和 getter 方法之外,是否有任何简单的方法来解决这个问题(可能是使用朋友?)?如果重要的话,我正在使用 Visual Studio 2008。
【问题讨论】:
-
不能把值传给构造函数吗?
-
@sbi: 也许我可以..但是我想知道如何解决这个问题,如果我不能将值作为构造函数参数传递。
标签: c++ templates type-conversion