根据C++标准,以下三种结构定义之间是否存在差异?
struct Foo
{
int a;
};
struct Foo
{
int a{};
};
struct Foo
{
int a{0};
};
Run Code Online (Sandbox Code Playgroud)
最后两个是C++ 11.
如果我想使用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 的原始论文,但我不同意解释,我不应该将接口放入库中.我觉得这篇论文是作为如何思考开发的指导原则(因为"用户正在定义界面而不是实现者").它是否正确?你如何使用依赖倒置原则?
在大型团队中工作时,代码样式工具通常用于强制执行编码约定.问题不是找到这样的工具.当你执行这个工具时,更是一个问题?你什么时候执行这个工具(例如astyle)?我在使用前两种方法的项目中工作过.
在一个单独的脚本中
建设时
作为预先提交的钩子
另一种方式我不知道......
c++ ×3
c++11 ×1
coding-style ×1
dependencies ×1
deployment ×1
git ×1
mercurial ×1
modularity ×1