关于 C++ 模块化的最佳实践

Best practice about C++ modularity

始终将声明和定义分开是一个好习惯,即使定义只有一行,例如构造函数或下面代码中的 int value() const;

我的目标是学习 C++,同时融入最佳实践。所以如果这段代码有什么需要改进的地方请告诉我。

//counter.h
#ifndef COUNTER_H
#define COUNTER_H
#include <QObject>


class Counter : public QObject
{
    Q_OBJECT
public:
    Counter();
    int value() const;

public slots:
    void setValue(int value);

signals:
    void valueChange(int newValue);
private:
    int m_value;
};

#endif // COUNTER_H

-

//counter.cpp
#include "counter.h"

Counter::Counter()
{
    m_value = 0;
}

int Counter::value() const
{
    return m_value;
}

void Counter::setValue(int value)
{
    if(value != m_value)
    {
        m_value = value;
        emit valueChange(value);
    }
}

在 class 定义中实现的所有函数都是内联的。因此,如果您将这些方法放在 class 定义中,您将使它们全部内联。这不是等效代码。

C++ 中的最佳做法是将尽可能多的定义移至 .cpp 文件,并使 .h 文件尽可能简单。减少头文件中 if #include 指令的数量。尽可能使用 classes 和结构的前向声明而不是完整定义。

唉,这些指南不适用于模板,这就是 C++ 编译如此缓慢的原因。