【发布时间】:2022-01-11 18:44:33
【问题描述】:
我有一个关于 boos::function 的问题。我有一个带有 boost::function 作为参数的函数。这个 boost::function 的返回值是 void()。但是我在代码中调用了函数 ChangeWorking(...) 几次,在一种情况下,我需要 boost::function 的返回值。有人知道如何解决这个问题吗?
实际功能如下:
void CElmWorkingPropertyList::ChangeWorking( boost::function<void( CPamWorking* )> a_pFunc, bool a_bAlignmentChange )
{
//do some stuff
CPamWorkingPtr pWork = IsBlockEditActive() ? pWorkSource : pWorkSource->Clone();
if (!pWork)
{
ASSERT( false ); // current working needs to be there
continue;
}
pWork->SetComponent( pWorkSource->GetComponent() );
if (a_pFunc)
{
a_pFunc(pWork.get());
}
//do more stuff
}
但我还需要一个函数,看起来像这样(这个函数没有实现):
void CElmWorkingPropertyList::ChangeWorking( boost::function<CPamWorking*( CPamWorking* )> a_pFunc, bool a_bAlignmentChange )
{
//do same stuff
if (a_pFunc)
{
pWork = a_pFunc(pWork.get());
}
//do more same stuff
}
这可能吗,还是我必须编写一个新函数?
【问题讨论】:
-
你不能返回一个值并忽略它吗?
-
没有。如果我从每个函数返回一个值,我必须多次更改代码。
-
那我不明白这个问题。您不能从返回类型为
void的函数返回某些内容 -
这已经是两个不同的函数了,因为参数的类型不同。不知道
pWork从哪里来,没什么好说的。 -
您可以在
function中存储一个 lambda,该 lambda 封装了一些函数调用以及可能的返回值处理。比如:godbolt.org/z/G6x6bqdMf.