如何在封闭命名空间之外进行定义

How to make definition outside of enclosing namespace

提问人:mouse_00 提问时间:7/21/2023 最后编辑:mouse_00 更新时间:7/21/2023 访问量:61

问:

我有以下代码:

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::fooA::B::fooCannot define or redeclare 'func' here because namespace 'B' does not enclose namespace 'A'A::B::foo

我看到了关闭命名空间、定义专业化并再次打开命名空间以定义和的唯一方法,但对我来说看起来不是很好:A::Bbarfoobar

namespace A
{

template <typename T>
void func(T);

namespace B {

  class foo {};

}

template <>
void ::A::func(B::foo);

namespace B {

  class bar {};

  class foobar {};
  
}

}
C++ 命名空间 定义

评论

1赞 mouse_00 7/21/2023
我说我想让代码导航更容易
0赞 mouse_00 7/21/2023
添加了我希望它更容易阅读代码

答:

1赞 Davis Herring 7/21/2023 #1

你不能这样做:没有规则规定在词法上在命名空间内但在逻辑上在命名空间内(通过)的情况下,名称查找将如何工作。(请注意,在工作版本中不需要。至少有一项提案允许这样做,它可能会在某个时候恢复,但这些规则必须制定。BAfunc::A::