我努力让我的类成为其父命名空间中模板的友元。有人可以解释我做错了什么吗:
以下是我在 MSVC8 (Visual Studio 2005) 中的尝试及其错误:
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
template<typename T>
friend class x;
...
};
}
}}
错误 C2888:a::b::x
:无法在命名空间 c
中定义符号
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
template<typename T>
friend class ::a::b::x;
...
};
}
}}
错误 C2888:a::b::x
:无法在命名空间 c
中定义符号
namespace a {
namespace b {
namespace c {
class y
{
template<typename T>
friend class ::a::b::x;
...
};
}
}}
错误 C2039:x
:不是 a::b
的成员
我不能只包含包含 class x
的头文件,因为它依赖于 class y
导致循环包含。
最佳答案
黑客解决方法:如果您知道模板将被实例化的所有特定类型,请与每个实例化而不是模板为友。例如:
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
friend class x<char>;
friend class x<wchar_t>;
...
};
}
}}
关于c++ - 我如何与父 namespace 中的模板类成为 friend ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694416/