当你进行以下工作时,可以使用哪些方法:
- 与其他几个程序员(例如1-3人)在小型C ++项目上一起工作,您使用单个存储库
- 创建一个类,声明其方法
- 还没有时间实现所有方法
- 因为代码尚未实现而不想让其他程序员使用您的代码; 或者不想使用尚未实现的代码部分
- 没有时间/可能告诉同事所有这些尚未实现的内容
- 当您的同事使用您尚未实现的代码时,您希望他们立即意识到他们还不应该使用它-如果他们遇到错误,您不希望他们猜测出错的原因、寻找潜在的错误等。
当你进行以下工作时,可以使用哪些方法:
最简单的答案是告诉他们。在与一组人一起工作时,沟通至关重要。
更加全面(也可能是最好的)的选择是创建自己的分支以开发新功能,只有在完成后将其合并回主分支。
但是,如果你真的希望你的方法被实现在主源代码中,但不想让人们使用它们,请使用异常或断言来存根。
assert(false && "未实现,请勿寻找错误!")
- Fabio Fracassi我很喜欢.Net中的NotImplementedException
这个概念。你可以轻松地定义自己的异常类,派生自std::exception
,并将what
覆盖为“未实现”。
它有以下优点:
我不会将其提交到代码库中。
声明它,而不要实现它。当程序员调用未实现的代码部分时,链接器会发出警告,这对程序员来说是一个明显的打击。
class myClass
{
int i;
public:
void print(); //NOt yet implemented
void display()
{
cout<<"I am implemented"<<endl;
}
};
int main()
{
myClass var;
var.display();
var.print(); // **This line gives the linking error and hints user at early stage.**
return 0;
}
断言是最好的方法。不会终止程序的断言更好,这样同事就可以继续测试他的代码,而不会被您的函数存根阻塞,并且他可以完全了解哪些功能尚未实现。
如果您的IDE不支持智能断言或持久性断点,则可以使用以下简单实现(c ++):
#ifdef _DEBUG
// 0xCC - int 3 - breakpoint
// 0x90 - nop?
#define DebugInt3 __emit__(0x90CC)
#define DEBUG_ASSERT(expr) ((expr)? ((void)0): (DebugInt3) )
#else
#define DebugInt3
#define DEBUG_ASSERT(expr) assert(expr)
#endif
//usage
void doStuff()
{
//here the debugger will stop if the function is called
//and your coworker will read your message
DEBUG_ASSERT(0); //TODO: will be implemented on the next week;
//postcondition number 2 of the doStuff is not satisfied;
//proceed with care /Johny J.
}
优点:
缺点:
P.S. 初始DEBUG_ASSERT实现的功劳归于我的同事E.G.
__asm__("int $0x3;")
替换__emit__(0x90CC)
会不会更好呢? - tauran你可以使用纯虚函数(= 0;)来继承类,或者更常见的做法是声明它们但不定义。不能调用没有定义的函数。