在 null 时寻找忽略指令的指针

Looking for a pointer ignoring instruction when null

我用的是监控classProgress。在很多功能中,如果有的话,我会更新进度。 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);
}

在自己创建它之前,我正在寻找一种智能指针来检查它是否为空,如果为空则忽略调用。 可以像这样使用的东西:

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 的解决方案。

该函数不必为空指针而烦恼,因此设计 Progress 使其可以像这样使用:

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 的实例,因此无法避免重新实现 Progesss 接口。

抱歉,错过了“只有C++03”。如果您不能使用 shared_ptr,请使用您选择的内存管理机制。如果禁用复制,在 XProgress 析构函数中删除的原始指针可能没问题。