gpt4 book ai didi

c++ - 我如何与父 namespace 中的模板类成为 friend ?

转载 作者:行者123 更新时间:2023-11-28 08:03:56 27 4
gpt4 key购买 nike

我努力让我的类成为其父命名空间中模板的友元。有人可以解释我做错了什么吗:

以下是我在 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/

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