C++中Lambda表达式转化为函数指针


复制代码
// -----------------------------------------------------------

auto combineCallbackLambda = [](GLdouble coords[3], void* vertex_data[4], GLfloat weight[4], void** dataOut) mutable -> void CALLBACK
{
  GLdouble * *vertex_data1 = (GLdouble * *)vertex_data;
  GLdouble* vertex = new GLdouble[7];
  vertex[0] = coords[0];
  vertex[1] = coords[1];
  vertex[2] = coords[2];
  for (int i = 3; i < 7; i++)
    vertex[i] = weight[0] * vertex_data1[0][i] + weight[1] * vertex_data1[1][i] + weight[2] * vertex_data1[2][i] + weight[3] * vertex_data1[3][i];
  *dataOut = vertex;
};

void (*combineCallbackFunction)(GLdouble coords[3], void* vertex_data[4], GLfloat weight[4], void** dataOut) = combineCallbackLambda;


// ----------------------------但[]中含有捕获时不能转换-------------------------------


auto vertexCallbackLambda = [&genPositionList, &genTriangle, &genPointIndex](void* vertex_data) mutable -> void CALLBACK
{
  fprintf(stdout, "Tessellation vertexCallback");
  GLdouble* pt = (GLdouble*)vertex_data;
  genTriangle[genPointIndex++] = pt;
  if (genPointIndex >= 3)
  {
    genPositionList.push_back(genTriangle[0]);
    genPositionList.push_back(genTriangle[1]);
    genPositionList.push_back(genTriangle[2]);
    genPointIndex = 0;
  }
};

//void (*vertexCallbackFunction)(void*) = vertexCallbackLambda;
复制代码
posted @   ParamousGIS  阅读(5071)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示