小编Der*_*our的帖子

如何使用 typedef 声明 lambda 函数,然后通过传递给函数来使用它?

我现在正在学习 C++,对 Lambda 函数的语法非常困惑

我想在单元顶部定义 lambda,例如

   typedef const std::function<void (bool)> bitloop;
Run Code Online (Sandbox Code Playgroud)

或者

   typedef void bitloop(bool bit, int idx);
Run Code Online (Sandbox Code Playgroud)

稍后,将 lambda 接受到类中的函数中,例如,在我的 Bits 类中,有一个 forEach 方法

void forEach(const bitloop loop){
 for (int i = 0; i<=fCount-1;i++){
    loop(this->isSet(i),i);  
  }   
}
Run Code Online (Sandbox Code Playgroud)

然后最终能够稍后编写不同的循环函数,传递一个值和循环索引,以便我可以捕获本地范围内的变量,例如

bits.forEach([&](bool on, int i){ 
      output("index" + to_string(count));   //count is locally declared variable
  });
Run Code Online (Sandbox Code Playgroud)

如果我删除 &,它可以与第二种类型 def 一起正常工作,但是我无法捕获计数变量。

有人可以解释一下我的做法哪里出了问题,以及这是否是一种有效的方法?

c++ parameters lambda

6
推荐指数
1
解决办法
6526
查看次数

使用RTTI以递归方式迭代delphi中的内部记录

我在Delphi(柏林)有很多记录结构,我试图通过RTTI递归迭代.代码不适用于内部记录.我在这做错了什么?

 Procedure WriteFields(Const RType  : TRttiType;
                       Const Test   : TTestRecord;
                       Var   Offset : integer);
 var
   RFields : TArray<TRTTIField>;
   i : integer;
   Val : TValue;
 begin
   RFields := GetFields(Rtype);
   try
     for i := Low(RFields) to High(RFields) do
     begin
       if RFields[i].FieldType.TypeKind <> tkRecord then
       begin
         Val := rfields[i].GetValue(@Test);
         writeln(Format('Field Name: %s, Type: %s, Value: %s, Offset: %d',[
                RFields[i].Name,
                RFields[i].FieldType.ToString,
                Val.ToString,
                RFields[i].Offset]));
       end
       else
       begin
         WriteLn(Format('------- Inner record : %s',[RFields[i].name]));
         //recursively call this routine for the other records, and fields
         Writefields(RFields[i].FieldType,Test,Offset);
       end;
       Offset …
Run Code Online (Sandbox Code Playgroud)

delphi rtti

3
推荐指数
1
解决办法
179
查看次数

标签 统计

c++ ×1

delphi ×1

lambda ×1

parameters ×1

rtti ×1