Pol*_*Tex 6 c++ coding-style class access-specifier
"传统的"C++类(只是一些随机声明)可能类似于以下内容:
class Foo
{
public:
Foo();
explicit Foo(const std::string&);
~Foo();
enum FooState
{
Idle, Busy, Unknown
};
FooState GetState() const;
bool GetBar() const;
void SetBaz(int);
private:
struct FooPartialImpl;
void HelperFunction1();
void HelperFunction2();
void HelperFunction3();
FooPartialImpl* m_impl; // smart ptr
FooState m_state;
bool m_bar;
int m_baz;
};
Run Code Online (Sandbox Code Playgroud)
如果原始程序员没有整齐地组织他的"访问区域",我总是发现这种类型的访问级别规范很难并且难以遵循.
看一下Java/C#风格的相同代码片段,我们得到:
class Foo
{
public: Foo();
public: explicit Foo(const std::string&);
public: ~Foo();
public: enum FooState
{
Idle, Busy, Unknown
};
public: FooState GetState() const;
public: bool GetBar() const;
public: void SetBaz(int);
private: struct FooPartialImpl;
private: void HelperFunction1();
private: void HelperFunction2();
private: void HelperFunction3();
private: FooPartialImpl* m_impl; // smart ptr
private: FooState m_state;
private: bool m_bar;
private: int m_baz;
};
Run Code Online (Sandbox Code Playgroud)
在我看来,这更容易在标题中读取,因为访问说明符就在目标旁边,而不是一堆线.我在使用未与通常的"*.hpp/*.inl"对分开的仅标题模板代码时发现这一点尤其正确.在那种情况下,函数实现的大小压倒了这个小而重要的信息.
我的问题很简单,源于我从未见过其他人在他们的C++代码中主动执行此操作的事实.
假设我没有"Class View"能力的IDE,那么使用这种级别的冗长有什么明显的缺点吗?
欢迎任何其他风格的建议!
就个人而言,我发现必须为每个符号指定访问限定符非常烦人.它使事情变得更难阅读,而不是更容易,并且鼓励在整个课程定义中自由混合私人和公共内容的坏习惯.我总是看到这种混乱.在C#中,我尝试使用#region private
等来缓解这种情况,这有望鼓励未来的维护者保持清洁.