如何在 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]
- 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()
方法听起来很有希望。
我是 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]
- 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()
方法听起来很有希望。