在 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
的实例,因此无法避免重新实现 Progess
s 接口。
抱歉,错过了“只有C++03”。如果您不能使用 shared_ptr
,请使用您选择的内存管理机制。如果禁用复制,在 XProgress
析构函数中删除的原始指针可能没问题。
我用的是监控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
的实例,因此无法避免重新实现 Progess
s 接口。
抱歉,错过了“只有C++03”。如果您不能使用 shared_ptr
,请使用您选择的内存管理机制。如果禁用复制,在 XProgress
析构函数中删除的原始指针可能没问题。