如何在 c++builder 中使用 IDE-managed Components 编写 for_each 循环

How to write a for_each loop with IDE-managed Components in c++builder

我是 c++ (c++builder) 的新手,想知道如何为每个循环编写代码,例如循环遍历我的 TTabControll 中的所有 TTabItem。

__published:    // IDE-managed Components
TTabControl *TabControl1;
TTabItem *TTabItem1;
TTabItem *TTabItem2;

现在我想做类似的事情:

for (auto &tTableItem : TabControl1) 
{  
    \ Do something with the curent TEdit
}

感谢您的帮助

来自 C++ 标准:

6.5.4 The range-based for statement [stmt.ranges]

  1. A range-based for statement is equivalent to
{
  auto && __range = for-range-initializer;
  for ( auto __begin = begin-expr,
             __end = end-expr;
        __begin != __end;
        ++__begin ) {
    for-range-declaration = *__begin;
    statement
  }
}

这意味着您必须为您的范围提供 begin-expr and an end-expr

如何执行此操作的示例:

#include <vector>
#include <iostream>

class Container {
 public:
    using iterator = typename std::vector<int>::iterator;

    Container(std::initializer_list<int> list) : v_(list) {}

    iterator begin() { return v_.begin(); }
    iterator end() { return v_.end(); }

 private:
    std::vector<int> v_;
};

int main() {
    Container c{1, 2, 3, 42};

    for (auto& elem : c) {
        std::cout << elem << '\n';
    }
}

因为我猜你不能修改 TTabControl 的源代码 class 以提供所述开始和结束表达式你可以派生你自己的 TTabControl:

class MyTabControl : public TTabControl {
 public:
    // begin and end member functions
}

或者,如果您不是绝对想使用 ranged-for,TTabControl::GetChildren() 方法听起来很有希望。