ループ関数を作りたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
YYSS
記事: 125
登録日時: 13年前
連絡を取る:

ループ関数を作りたい

#1

投稿記事 by YYSS » 12年前

C++で「何回ループする」っていう引数をいれるだけでループしてくれる関数を作りたいのです。

理想は

コード:


int a = 0;
Loop(10){

 a++;

}
//結果a=10になる
for文やWhileだと、毎回変数を用意しないといけなく、面倒ではないのですが、手軽にループを行いたいと思い、ふと考えました。


今考えたのが

コード:

//宣言
bool Loop( int count ){
 static int a = 0;
 if( a == count ){ 
   a = 0;
   return false;
 }
 else{
   a++;
 }

}
//使うとき
int b = 0;
while( Loop(10) ){
   b ++;
}

一応理想には近づいたのですが、完全に理想通りの関数を作ることは出来るのでしょうか?
アドバイスをいただけると幸いです

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: ループ関数を作りたい

#2

投稿記事 by h2so5 » 12年前

この設計だとループをネストしたとき、
全てのループで static int a の数値を共有することになってしまいますよ。
breakで抜けた時も a がリセットされません。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: ループ関数を作りたい

#3

投稿記事 by h2so5 » 12年前

一応こんな手もあったり...

コード:

#define Loop(num) for(int _i=0;_i<num;_i++)

box
記事: 2002
登録日時: 13年前

Re: ループ関数を作りたい

#4

投稿記事 by box » 12年前

YYSS さんが書きました:

コード:

Loop(10){
ぱっと見、C/C++のコードに見えそうもないところがちょっとイヤだったりする私…。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: ループ関数を作りたい

#5

投稿記事 by Dixq (管理人) » 12年前

あまりそのような処理はするべきではないと思います。
関数名から見ても、中でLoopしているわけではありませんし。しいて言うならProcessCounter?
その関数は一度使ったら二度と再利用出来ませんし、二重に使いたい時も他に影響してしまいます。
ポインタ引数を持たせればいいでしょうが、それなら結局素直にforに変数iを用意した方が自然です。
C++であれば、for文の中で変数が宣言出来ます。
for( int i=0; i<10; i++ ){
}
スコープは括弧の中だけなので、こちらの方が関数を作るよりスマートだと思います。
世間一般的に書かれている書き方に慣れておいた方がオープンソースを読む時も、人にコードを見せる時も楽だと思いますよ。

アバター
YYSS
記事: 125
登録日時: 13年前
連絡を取る:

Re: ループ関数を作りたい

#6

投稿記事 by YYSS » 12年前

色々な意見をありがとうございます

h2so5 が教えてくださった。

コード:

#define Loop(num) for(int _i=0;_i<num;_i++)
というマクロを作れば理想どおりになりました。


でも、世間一般的に書かれている方法で書くのが一番分かりやすいと言われて、
自分が書きやすいソースにするか、他人が読みやすいソースにするか・・・
難しいですね

とりあえず、自分の中でもう少し考えてみたいと思います。

回答ありがとうございました!!

アバター
a5ua
記事: 199
登録日時: 13年前

Re: ループ関数を作りたい

#7

投稿記事 by a5ua » 12年前

マクロを使うか、もしくは
以下のように、ループ回数と関数ポインタ(or 関数オブジェクト)を受け取る関数を作るかですかね。
C++0xであれば、ラムダ式が使えます

コード:

template <typename F>
void loop(int n, const F &f)
{
	for (int i = 0; i < n; ++i) {
		f();
	}
}

int main()
{
	int a = 0;
	loop(10, [&a] {
		++a;
	});
}

閉鎖

“C言語何でも質問掲示板” へ戻る