我想开始更喜欢免费(非会员)功能而不是会员功能 - 遵循这篇文章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 ++规则。
答案 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;)