[英]C++ lambda function in macro define
我在https://github.com/baldurk/renderdoc/blob/v1.x/qrenderdoc/Code/Interface/RemoteHost.h中閱讀代碼如下:
// simple helper for the common case of 'we just need to run this on the replay thread'
#define INVOKE_MEMFN(function) \
m_Ctx.Replay().AsyncInvoke([this](IReplayController *r) { function(r); });
宏是這樣調用的
void TextureViewer::setScrollPosition(const QPoint &pos)
{
m_TexDisplay.xOffset = qMax(CurMaxScrollX(), (float)pos.x());
m_TexDisplay.yOffset = qMax(CurMaxScrollY(), (float)pos.y());
m_TexDisplay.xOffset = qMin(0.0f, m_TexDisplay.xOffset);
m_TexDisplay.yOffset = qMin(0.0f, m_TexDisplay.yOffset);
if(ScrollUpdateScrollbars)
{
ScrollUpdateScrollbars = false;
if(ui->renderHScroll->isEnabled())
ui->renderHScroll->setValue(qBound(0, -int(m_TexDisplay.xOffset), ui->renderHScroll->maximum()));
if(ui->renderVScroll->isEnabled())
ui->renderVScroll->setValue(qBound(0, -int(m_TexDisplay.yOffset), ui->renderVScroll->maximum()));
ScrollUpdateScrollbars = true;
}
INVOKE_MEMFN(RT_UpdateAndDisplay);
}
當這個 function 被調用時, IReplayController *r
如何傳遞給 marco?
當這個 function 被調用時,
IReplayController *r
如何傳遞給 marco?
它不是。 宏所做的只是更改代碼中的一行,例如
INVOKE_MEMFN(my_function_name)
到
m_Ctx.Replay().AsyncInvoke([this](IReplayController *r) { my_function_name(r); });
正在AsyncInvoke
的是 AsyncInvoke,它將IReplayController*
傳遞給 lambda。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.