用于免费功能的c ++源代码组织

时间:2012-06-05 19:16:55

标签: c++

我想开始更喜欢免费(非会员)功能而不是会员功能 - 遵循这篇文章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位于namespace foo,那么我也将自由函数放入namespace foo

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

我正在寻找namespace的各个方面以及文件名的建议。

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

如果你想用免费函数替换成员函数,我假设这些自由函数与所讨论的类紧密相关。在这种情况下,他们不应该公开。我会使用匿名内部命名空间:

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

//myclass.cpp
#include "myclass.h"
namespace myNamespace
{
   namespace
   {
      void helper() {};
   }
   void MyClass::foo()
   {
   }
}

答案 2 :(得分:1)

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

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

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

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

在单独的文件中照常执行。

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

所以KISS;)