我知道在 for 循环中使用 astd::pair
或匿名struct
类型声明和初始化两个不同的变量,但这些对我的目的不起作用。
假设我有以下类定义
class Object {
private:
int i;
public:
Object(int i) : i(i) { }
// everything else deleted
Object() = delete;
Object(const Object &) = delete;
Object(Object &&) = delete;
Object & operator=(const Object &) = delete;
Object & operator=(Object &&) = delete;
};
有什么方法可以在 循环行中初始化一个Object
和一个。我不想在 for 循环或类似的东西周围添加一个额外的块。我可以接受, , anonymous等,只要它有表格int
for
std::tuple
std::pair
structs
for(/* creates Object and int*/ ; /*whatever*/; /*whatever*/) { /* ... */}
或(如果存在语法)
for( Object o(69), int i = 0; i < 10; ++i) { /* ... */ }
我不想要的是一个额外的命名类定义。我已经想出了这个:
for(class Container : private Object {
public:
int value;
Container(int i) : Object(i), value(0) { }
} container(69); /* ... */ ;
container.value < 10;
++container.value) { /* ... */}
但是类名Container
随后在 for 循环中变得可见,这是我试图避免的。
我对此的实际使用是 astd::lock_guard<std::mutex>
和 a bool
,以便在退出循环后释放互斥锁。