std::pair
または匿名struct
型を使用して for ループで 2 つの異なる変数を宣言および初期化することは認識していますが、これらは私の目的では機能しません。
次のクラス定義があるとしましょう
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;
};
ループラインで anObject
と anを初期化する方法はありますか? 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 ループ内で表示されるようになります。これは回避しようとしています。
これを実際に使用するのは aとstd::lock_guard<std::mutex>
abool
であるため、ループを終了した後にミューテックスが解放されます。