簡體   English   中英

宏定義中的 C++ lambda function

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM