我使用监视类progress
。 在很多函数中,我会更新如果给定的进度。 progress变量是可选的,由指针给出,该指针可以为NULL。 我代码的很多部分看起来是这样的:
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一起工作的解决方案。
该函数不应该使用空指针,因此应设计progres
,使其可以按如下方式使用:
void do_the_job(XProgress& progress)
{
do_part_1();
progress.set(0.25f);
do_part_2();
progress.set(1.0f);
}
到达那里很简单:
struct XProgress {
std::shared_ptr<Progress> instance;
void set(float x) {
if (instance) instance->set(x);
}
};
在任何情况下,您都需要某个实例来调用set
,因此无法避免重新实现progess
的接口。