我将大部分类分为两个文件(.h 和 .cpp)。它们的所有方法(公共、私有或受保护)都在 .h 文件中声明并在 .cpp 文件中定义。
但是,有时我只需要一个仅由其中一个成员方法使用的快速辅助方法。在这些情况下,是否可以在 .cpp 文件中将此方法声明/定义为非成员函数,而不在 .h 文件中声明它?
这种方法可能有哪些缺点?我看到的是,该方法的定义必须出现在 .cpp 文件中的使用之前(如果我们不想使用前向声明)。此外,如果这些函数完全位于 .cpp 文件中,IDE 可能会很难找到这些函数。
我问这个问题的原因是,有时感觉就像我用这些不访问成员数据且不被任何其他类/文件使用的方法的声明污染了 .h 文件。看起来我通过引入这些辅助方法声明使 .h 文件中真正重要的声明更难查找/读取。
使用非成员函数是更好的解决方案。public如果可以实现的话,有些人甚至更喜欢非成员函数而不是成员函数。请参阅Scott Meyer 关于该主题的文章。
很久以前,我曾经使辅助函数static在文件范围内运行。
几年来,我在.cpp文件中使用匿名命名空间,并将函数和任何辅助类放在匿名命名空间中。
namespace
{
// Helper class(es)
struct Helper
{
...
};
// Helper funtions
type1 function1(...) { ... }
type2 function2(...) { ... }
}
Run Code Online (Sandbox Code Playgroud)
当我想type_info在消息中使用帮助器类时,匿名名称空间是一个问题。为了克服这个问题,我采用了一种新方法。使用namespace与该文件对应的a .cpp。
foo.cpp:
namespace fooNS // Just append "NS" to the name of the cpp file
{
// Helper class(es)
struct Helper
{
...
};
// Helper funtions
type1 function1(...) { ... }
type2 function2(...) { ... }
}
using namespace fooNS; // This allows the helper classes and functions
// to be used in the .cpp file without explicit use
// of the namespace.
Run Code Online (Sandbox Code Playgroud)
截至今天,我会推荐用于辅助类和辅助函数的最后一种方法。