设模板函数为友元时出错,该如何解决
设模板函数为友元时出错
vc7.1
namespace Test
{
template <typename T>
inline void get( T & t )
{
}
class A
{
template <typename T>
friend inline void get( T & t );
};
}
class B
{
friend class A;
int value;
};
namespace Test
{
template <>
inline void get( B & b )
{
b.value = 0;
}
}
error C2248: “B::value” : 无法访问 private 成员(在“B”类中声明)
------解决方案--------------------
C++ 中,
友元关系不能传递
------解决方案--------------------
有些“好像”其实不是那么真的“像”。友元不能传递,你现在的代码是错的。
boost的代码,你也肯定没看仔细。
------解决方案--------------------
C++ 中,
友元关系不能传递
所以 get 可以访问 A 的private 成员,
但是无法访问 B 的private 成员,
导致出错
同意
vc7.1
namespace Test
{
template <typename T>
inline void get( T & t )
{
}
class A
{
template <typename T>
friend inline void get( T & t );
};
}
class B
{
friend class A;
int value;
};
namespace Test
{
template <>
inline void get( B & b )
{
b.value = 0;
}
}
error C2248: “B::value” : 无法访问 private 成员(在“B”类中声明)
------解决方案--------------------
C++ 中,
友元关系不能传递
------解决方案--------------------
有些“好像”其实不是那么真的“像”。友元不能传递,你现在的代码是错的。
boost的代码,你也肯定没看仔细。
------解决方案--------------------
C++ 中,
友元关系不能传递
所以 get 可以访问 A 的private 成员,
但是无法访问 B 的private 成员,
导致出错
同意