小编Ken*_*enK的帖子

一种在C++中强制使用接口的方法

在C++中,假设我有一个Derived实现接口类的类BaseInterface,其中BaseInterface只有纯虚函数和虚析构函数:

class BaseInterface
{
  public:
    virtual void doSomething() = 0;
    ~BaseInterface(){}
};

class Derived : public BaseInterface
{
  public:
    Derived() {}
    ~Derived(){}

  protected:
    virtual void doSomething();

  private:
    int x;
};
Run Code Online (Sandbox Code Playgroud)

Derived类层次结构之外的类不应该Derived::doSomething()直接调用,即,只应通过BaseInterface类以多态方式访问它.为了执行这条规则,我已经取得了Derived::doSomething()保护.这很好用,但我正在寻找关于这种方法的意见/赞成.

谢谢!

c++ interface

5
推荐指数
1
解决办法
882
查看次数

寻找适用于 Linux 的 C++ 度量工具

我正在寻找可以在 Linux 上运行的 C++ 代码质量度量工具。集成 Eclipse 会是一个好处,但不是必需的。

我找到了一个不错的工具,名为Source Monitor,但它只能在 Windows 上运行,并且源代码无法在 Linux 上重建。

我还在那里看到了cccc,但根据错误列表,它似乎不再被维护了。

c++ code-metrics

5
推荐指数
1
解决办法
5857
查看次数

C++规范是否允许非虚拟类的实例包含vtable指针的内存?

C++规范是否允许非虚拟类的实例包含vtable指针的内存?我问这个,因为一位同事说他曾经使用过C++编译器,其中发生了以下情况:

  class MyClass
  {

     public:

     HeaderStruct header; //This had extra words
     BodyStruct     message_body;
  };
Run Code Online (Sandbox Code Playgroud)

然后他将代码更改为此,删除了额外的单词:

  struct MyClass
  {

     HeaderStruct header; //This did not have extra words
     BodyStruct     message_body;
  };
Run Code Online (Sandbox Code Playgroud)

这些类型都不是虚拟的,也不是虚拟的.所以理论上可能这个特定的编译器为类实例分配了vptr的内存,但是没有为struct实例分配内存.所以我只想确定规范是否排除了这种编译器行为.

谢谢!

c++ vtable

3
推荐指数
1
解决办法
315
查看次数

在C++中,为什么循环目录依赖性不好?

我问的是关于在Linux上开发的C++项目.考虑一下:

我有两个对等目录,dir1dir2. dir1包含classA.hclassB.h. dir2包含classC.hclassD.h. dir1/classA.h有一个#includedir2/classC.h.dir2/classD.h有一个#includedir1/classB.h.因此,目录dir1和目录之间存在周期性依赖关系dir2.但是,任何类之间都没有周期性依赖关系.

我理解为什么循环依赖关系在类之间是不好的.对我来说似乎很直观,目录也应该没有周期性依赖 - 但是我无法弄清楚为什么这会很糟糕.

有人有解释吗?

c++ directory-structure

3
推荐指数
1
解决办法
200
查看次数