【发布时间】:2020-06-30 14:51:19
【问题描述】:
我使用了一个监控类Progress。在很多功能中,如果给定,我会更新进度。进度变量是可选的,由可以为空的指针给出。我的很多部分代码如下所示:
void do_the_job(Progress* progress)
{
do_part_1();
if((bool)progress)
progress->set(0.25f);
do_part_2();
if((bool)progress)
progress->set(1.0f);
}
在自己创建它之前,我正在寻找一种智能指针来检查它是否为 null,如果为 null,则忽略调用。 可以像这样使用的东西:
void do_the_job(boost::could_be_null_ptr<Progress> progress)
{
do_part_1();
progress->set(0.25f); // ignored if null
do_part_2();
progress->set(1.0f); // ignored if null
}
出于兼容性原因,我不使用 C++11 或 >C++11。请只使用 C++03 的解决方案。
【问题讨论】:
-
当然没有理由在一个函数中多次检查它。您可以在函数的开头使用
if (!progress) return;。另一个选项可能适用于调用所有这些函数的上下文,以确保它不会传递空值,具体取决于代码的该部分是如何设计的。 -
你不能使用条件吗?
-
这能回答你的问题吗? Is there a safe navigation operator for C++? 或 stackoverflow.com/questions/1785426/… 或更多。剧透:不,这不能完成,也不能在库中编码,甚至在现代版本的 C++ 中也不能。
-
if((bool)progress)是毫无意义的冗长,只是做if(progress)。 -
@lurker 进度只是一个监控工具。 (例如进度条)。如果指针为空,函数必须做的工作,只是忽略进度对象的更新。