提问人:mouse_00 提问时间:7/21/2023 最后编辑:mouse_00 更新时间:7/21/2023 访问量:61
如何在封闭命名空间之外进行定义
How to make definition outside of enclosing namespace
问:
我有以下代码:
namespace A
{
template <typename T>
void func(T);
namespace B
{
class foo {};
template <>
void ::A::func(foo); // ERROR
class bar {};
class foobar {};
}
}
我有一个模板函数,想对类进行专业化,并希望将其置于类的定义之下,以便于导航和阅读代码。现在我收到一个错误.我可以在接近 的地方定义我的专业吗?A::func<T>
A::B::foo
A::B::foo
Cannot define or redeclare 'func' here because namespace 'B' does not enclose namespace 'A'
A::B::foo
我看到了关闭命名空间、定义专业化并再次打开命名空间以定义和的唯一方法,但对我来说看起来不是很好:A::B
bar
foobar
namespace A
{
template <typename T>
void func(T);
namespace B {
class foo {};
}
template <>
void ::A::func(B::foo);
namespace B {
class bar {};
class foobar {};
}
}
答:
1赞
Davis Herring
7/21/2023
#1
你不能这样做:没有规则规定在词法上在命名空间内但在逻辑上在命名空间内(通过)的情况下,名称查找将如何工作。(请注意,在工作版本中不需要。至少有一项提案允许这样做,它可能会在某个时候恢复,但这些规则必须制定。B
A
func
::A::
评论