提问者:小点点

查找当为null时忽略指令的指针


我使用监视类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一起工作的解决方案。


共1个答案

匿名用户

该函数不应该使用空指针,因此应设计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的接口。