gpt4 book ai didi

c++ - 同一模板的不同模板实例化之间的转换

转载 作者:搜寻专家 更新时间:2023-10-31 00:22:45 25 4
gpt4 key购买 nike

我正在尝试写一个 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; 给出了以下错误.

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

我明白这个错误是因为A<U>是与 A<T> 完全不同的类型.除了提供 setter 和 getter 方法之外,是否有任何简单的方法来解决这个问题(可能是使用 friend ?)?如果重要的话,我正在使用 Visual Studio 2008。

最佳答案

VC10 接受这个:

template <class T = int>
class A
{
public:
template< typename U>
friend class A;

A() : m_a(0){}

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

关于c++ - 同一模板的不同模板实例化之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com