5

我想开始更喜欢免费(非成员)函数而不是成员函数 - 遵循这篇文章http://www.drdobbs.com/184401197

我习惯于以这种方式组织我的 C++ 类,我有ClassName.h声明和ClassName.C实现。

ClassName.h :

struct ClassName { 
    ClassName();
    void setData( unsigned data );
};

然后实现

ClassName.C :

#include "ClassName.h"

ClassName::ClassName() { dosomething(); };
void setData( unsigned data ) { dootherthings(); }; 

那么当我想要一个免费的功能时如何组织我的代码adjustClassData()呢?我也想把这个函数放到命名空间中。

假设ClassName是 in namespace foo,那么我也会将 free 函数放入namespace foo

namespace foo {
    void adjustClassData( ClassName & inObj );
}

我正在寻找namespace文件名的方面和建议。

我正在寻找一些最佳实践——因为在规定文件组织的标准中没有 C++ 规则。

4

3 回答 3

6

如果没有太多,您可以将处理特定类的自由函数放在类头和实现文件中。

否则,提出一个命名约定并将它们放在一个单独的头文件和实现文件中(例如 ClassNameFunctions.h/.cpp)。

于 2012-06-05T19:21:43.750 回答
1

如果您想用自由函数替换成员函数,我假设这些自由函数与相关类密切相关。在这种情况下,它们不应该公开。我会使用匿名内部命名空间:

//myclass.h
namespace myNamespace
{
   class MyClass
   { 
      void foo();
   };
}

//myclass.cpp
#include "myclass.h"
namespace myNamespace
{
   namespace
   {
      void helper() {};
   }
   void MyClass::foo()
   {
   }
}
于 2012-06-05T19:24:07.650 回答
1

我建议将自由函数的声明放在单独的标题中,因为它们不是类本身的一部分,但是我会将所有函数放在同一个命名空间中。

//Bar.h
namespace foo{
class Bar{}
}

在声明自由函数的标题中,我将对类本身使用前向声明。

//BarHelper.hpp
namespace foo{
class Bar;
void somefunc(&Bar);
}

像往常一样在单独的文件中实施。

现在我正在浏览大量的头文件,其中通常混合了几个类和自由函数的声明和定义。这是一个真正的痛苦。

所以亲吻;)

于 2014-01-30T10:14:43.380 回答