小编Ste*_*ser的帖子

非静态数据成员初始化

根据C++标准,以下三种结构定义之间是否存在差异?

struct Foo
{
    int a;
};

struct Foo
{
    int a{};
};

struct Foo
{
    int a{0};
};
Run Code Online (Sandbox Code Playgroud)

最后两个是C++ 11.

c++ c++11

10
推荐指数
1
解决办法
1070
查看次数

依赖倒置原则对项目结构有哪些影响?

如果我想使用DIP开发一个假设的模块化C++项目.由于模块化,我选择在一个库中完全实现一个特定功能A.另一个库B(或两个或三个......)正在使用此功能(例如,日志记录机制):

class ILogger
{
    virtual void log(const std::string& s) = 0;
};
Run Code Online (Sandbox Code Playgroud)

我应该把这个界面放在哪里?一些博主似乎建议,因为界面属于其用户(因为DIP),你应该将界面放在用户端(或这里).这也可以提高可测试性,因为您不需要任何实现链接到测试.

这意味着,库A本身不会编译,因为它缺少接口.这也意味着,如果库C也将使用日志记录工具,它还会引入一个接口ILogger,这将打破ODR?这可以通过引入仅包含接口的额外包层库来解决.但主要问题仍然存在:

在哪里放置界面?我阅读了关于DIP 的原始论文,但我不同意解释,我不应该将接口放入库中.我觉得这篇论文是作为如何思考开发的指导原则(因为"用户正在定义界面而不是实现者").它是否正确?你如何使用依赖倒置原则?

c++ deployment dependencies modularity dependency-inversion

8
推荐指数
1
解决办法
413
查看次数

在哪里挂钩编码约定脚本?

在大型团队中工作时,代码样式工具通常用于强制执行编码约定.问题不是找到这样的工具.当你执行这个工具时,更是一个问题?你什么时候执行这个工具(例如astyle)?我在使用前两种方法的项目中工作过.

在一个单独的脚本中

  • 不能干扰其他工具.
  • 用户可以控制执行脚本.
  • 未强制用户使用该工具.

建设时

  • 在构建之前将确保只构建兼容代码.
  • 可能会减慢构建时间.
  • 强制用户使用此工具.

作为预先提交的钩子

  • 将确保只提交和推送合规代码.
  • 工具中的错误未经测试进入存储库.

另一种方式我不知道......

c++ git mercurial coding-style

2
推荐指数
1
解决办法
205
查看次数