Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不在标题中包含所有函数声明以创建一个";私有名称空间";?_C++_Namespaces_Private - Fatal编程技术网

C++ 不在标题中包含所有函数声明以创建一个";私有名称空间";?

C++ 不在标题中包含所有函数声明以创建一个";私有名称空间";?,c++,namespaces,private,C++,Namespaces,Private,我写代码已经有一段时间了。我一直在使用名称空间来分隔代码的几个部分,以使代码更具可读性。然而,我遇到了一个问题,我想私下里做点什么。以下是我发现有效的方法: //foobar.h namespace foo_bar { //Other items here... } 很好。使用这种方法有什么负面影响吗?我认为类可能是更好的选择,但使用名称空间在当时似乎是一个更简单的解决方案,因为它是一个项目。有没有更“传统”的方法?这可能会导致其他问题吗?这可能会有什么问题 编辑:我想我不清楚自己做了什么

我写代码已经有一段时间了。我一直在使用名称空间来分隔代码的几个部分,以使代码更具可读性。然而,我遇到了一个问题,我想私下里做点什么。以下是我发现有效的方法:

//foobar.h
namespace foo_bar {
  //Other items here...
}
很好。使用这种方法有什么负面影响吗?我认为类可能是更好的选择,但使用名称空间在当时似乎是一个更简单的解决方案,因为它是一个项目。有没有更“传统”的方法?这可能会导致其他问题吗?这可能会有什么问题


编辑:我想我不清楚自己做了什么。我所做的是:我没有在头文件中包含函数原型,因此当包含时,头文件使包含该文件的代码认为该函数不存在。

要使
foo_barz
真正“私有”(即,它的名称不能从其他单元访问),请将其放置在匿名命名空间中,非
foo\u bar

// foobar.cpp

namespace   /* stuff in here is only visible within this unit */
{ 
    void foo_barz() { ...
}
如果要在定义该函数之前声明该函数,可以添加:

namespace 
{
    void foo_barz();
}
因为同一单元中的多个未命名命名空间实际上都引用同一个未命名命名空间

实现相同功能的另一种方法是将函数声明为静态:

static void foo_barz() { ...

可以在命名空间内部或外部执行。有些人不赞成此选项(原因我不清楚)。

符号在TU之外仍然可以访问,这就是原因。对于匿名名称空间,我将如何编写函数原型/引用以使用
foo_barz
?另外,对于静态函数,我仍然没有将其包含在头文件中?仅当您打算从其他单元使用时,才将其包含在头文件中。(因此,在这种情况下不要这样做)。更新后的帖子中包含了函数原型,只有当你不能将函数定义放在调用之前时才有必要。关于
静态
与未命名
命名空间
的争论,我发现更容易阅读包装在命名空间中的定义,而不是将
静态
放在所有内容之前。
static void foo_barz() { ...