详细名称空间使用权

问题描述 投票:0回答:1

假设我有以下代码:

using my_type = int;

namespace detail {
void foo() { my_type x; do_foo_stuff(x); }
}

void bar() { do_bar_stuff(); detail::foo(); }
void baz() { do_baz_stuff(); detail::foo(); }

我想将foo()放在其他文件中。这样做的动机是我有很多这样的详细信息和详细信息功能,并且我希望公共API的标头不要被detail中出现的内容弄得乱七八糟,并且不打算直接使用。

问题是-什么是惯用的方式?

  • 我不能只在公共标头的end处包含带有detail::代码的文件-因为声明需要在使用它们时就进行。
  • 我不能只在公共标题的开始处包含带有detail::代码的文件-因为它们依赖于某些公共定义,例如类型和常量。假设它们不依赖任何functions >>。
  • 所以它不能是这两个选项之一。

假设我有以下代码:using my_type = int;命名空间详细信息{void foo(){my_type x; do_foo_stuff(x); }} void bar(){do_bar_stuff();详细信息:: foo(); } void baz(){do_baz_stuff(); ...

c++ forward-declaration idiomatic code-layout
1个回答
0
投票

我目前的想法是对同一标头同时进行文件开始和文件结束包含,而不是使用两次包含机制,而不是为其提供包含保护,其中第一个包含被暴露声明和第二个公开定义,例如类似于:

© www.soinside.com 2019 - 2024. All rights reserved.