我将我的大部分类(class)分成两个文件(.h 和 .cpp)。它们的所有方法(公共(public)、私有(private)或 protected )都在 .h 文件中声明并在 .cpp 文件中定义。
但是,有时我只需要一个仅由其中一个成员方法使用的快速辅助方法。在这些情况下,是否可以在 .cpp 文件中将此方法声明/定义为非成员函数而不在 .h 文件中声明它?
这种方法可能有哪些缺点?我看到的是这个方法的定义必须在它在 .cpp 文件中的使用之前出现(如果我们不想使用前向声明)。如果这些函数完全位于 .cpp 文件中,IDE 也可能难以找到它们。
我问这个问题的原因是,有时我几乎感觉我正在用这些不访问成员数据且不被任何其他类/文件使用的方法的声明污染 .h 文件。看起来我通过引入这些辅助方法声明使 .h 文件中真正重要的声明更难找到/阅读。
最佳答案
使用非成员函数是更好的解决方案。如果可以实现的话,有些人甚至更喜欢非成员函数而不是 public
成员函数。参见 Scott Meyer's article on the subject .
在很久以前,我曾经在文件范围内制作辅助函数 static
函数。
几年来,我在 .cpp
文件中使用匿名命名空间,并将函数和任何辅助类放在匿名命名空间中。
namespace
{
// Helper class(es)
struct Helper
{
...
};
// Helper funtions
type1 function1(...) { ... }
type2 function2(...) { ... }
}
当我想在消息中使用辅助类的 type_info
时,匿名命名空间是个问题。为了克服这个问题,我采用了一种新方法。使用与 .cpp
文件对应的 namespace
。
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.
到今天为止,我会推荐最后一种方法用于辅助类和辅助函数。
关于c++ - 在 C++ 中使用非成员方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143403/