C++类访问说明符详细程度

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,那么使用这种级别的冗长有什么明显的缺点吗?

欢迎任何其他风格的建议!

mis*_*tor 10

"在罗马做到入乡随俗."

我花了很多时间使用Java,就像分别为每个字段和方法指定访问说明符的样式一样.但是,当我使用C++编程时,我总是使用第一个代码片段中显示的样式.


Mar*_*tos 5

就个人而言,我发现必须为每个符号指定访问限定符非常烦人.它使事情变得更难阅读,而不是更容易,并且鼓励在整个课程定义中自由混合私人和公共内容的坏习惯.我总是看到这种混乱.在C#中,我尝试使用#region private等来缓解这种情况,这有望鼓励未来的维护者保持清洁.