yes*_*aaj 19 c++ design-by-contract
是否有任何库有助于在C++应用程序中通过契约原则实现设计?
特别是,我正在寻找一个可以使用原理的库,就像这样.
我遵循以下文章的教导:
我最终应用的是Samek的方法.只需为REQUIRE,ENSURE,CHECK和INVARIANT(基于现有的assert宏)创建宏非常有用.当然,它不如母语支持那么好,但无论如何,它可以让你从技术中获得大部分实用价值.
至于图书馆,我认为使用图书馆并不值得,因为断言机制的一个重要价值就是它的简单性.
有关调试代码和生产代码之间的区别,请参阅何时断言保留在生产代码中?.
简单?
在函数开头声明语句以测试您的需求.在函数末尾声明语句以测试结果.
是的,它很粗糙,它不是一个大系统,但它的简单性使它具有多功能性和便携性.
某些设计模式(例如非虚拟接口)可以自然地为给定方法编写前/后条件:
#include <cassert>
class Car {
virtual bool engine_running_impl() = 0;
virtual void stop_impl() = 0;
virtual void start_impl() = 0;
public:
bool engine_running() {
return engine_running_impl();
}
void stop() {
assert(engine_running());
stop_impl();
assert(! engine_running());
}
void start()
{
assert(! engine_running());
start_impl();
assert(engine_running());
}
}
class CarImpl : public Car {
bool engine_running_impl() {
/* ... */
}
void stop_impl() {
/* ... */
}
void start_impl() {
/* ... */
}
}
Run Code Online (Sandbox Code Playgroud)