C++ c++;自由函数的源代码组织
我想开始更喜欢自由(非成员)函数而不是成员函数——在本文之后 <>我习惯于用这种方式组织我的C++类,我有声明的<代码> CordNe.H./Cu> >和<代码> CordNe.c>代码>实现。C++ c++;自由函数的源代码组织,c++,C++,我想开始更喜欢自由(非成员)函数而不是成员函数——在本文之后 我习惯于用这种方式组织我的C++类,我有声明的 CordNe.H./Cu> >和 CordNe.c>代码>实现。 ClassName.h : struct ClassName { ClassName(); void setData( unsigned data ); }; 然后就开始实施了 ClassName.C : #include "ClassName.h" ClassName::ClassName()
ClassName.h :
struct ClassName {
ClassName();
void setData( unsigned data );
};
然后就开始实施了
ClassName.C :
#include "ClassName.h"
ClassName::ClassName() { dosomething(); };
void setData( unsigned data ) { dootherthings(); };
那么,当我想要一个自由函数adjustClassData()
时,如何组织代码呢?
我还想把这个函数放到名称空间中
//Bar.h
namespace foo{
class Bar{}
}
假设ClassName
位于namespace foo
中,那么我也会将自由函数放入namespace foo
中:
namespace foo {
void adjustClassData( ClassName & inObj );
}
我正在寻找名称空间
的各个方面以及文件名的建议
我正在寻找一些最佳实践——因为在规范文件组织的标准中没有C++规则。 如果没有太多,可以将特定的类处理的自由函数放在类头和实现文件中。
否则,提出一个命名约定,并将它们放在一个单独的头文件和实现文件中(例如ClassNameFunctions.h/.cpp)。如果您希望用自由函数替换成员函数,我假设这些自由函数与所讨论的类密切相关。在这种情况下,它们不应该公开。我会选择匿名内部名称空间:
//myclass.h
namespace myNamespace
{
class MyClass
{
void foo();
};
}
//myclass.cpp
#include "myclass.h"
namespace myNamespace
{
namespace
{
void helper() {};
}
void MyClass::foo()
{
}
}
我建议将自由函数的声明放在一个单独的头中,因为它们不是类本身的一部分,但是我会将它们放在同一个名称空间中
//Bar.h
namespace foo{
class Bar{}
}
在声明自由函数的标题中,我将对类本身使用前向声明
//BarHelper.hpp
namespace foo{
class Bar;
void somefunc(&Bar);
}
像往常一样在单独的文件中实现
现在我正在浏览大量的头文件,这些头文件中混合了几个类和自由函数的声明和定义。这真是一种痛苦
所以亲吻;) 使用
.c
作为文件扩展名可能会导致问题。例如,MSVC将把它编译成C而不是C++。这是一篇很好的文章。一个(重要的)注意: