質問
C ++で非常に簡単なことをしたいのですが、方法がわかりません。 forループのような関数を作成したいのですが、理想的には、反復が発生するべき時間の変数を入力し、括弧内のいくつかの関数が実行されます。私は十分に明確だったと思います。ありがとう...
例
superFor (1)
{
//commands to be executed here
add(1+2);
}
解決
C ++では、(現在のバージョンの)言語にはここで必要な機能が不足しているため、必要な機能がありません。つまり、機能ブロック<!>#8220; on the fly <!>#8221;を作成します。
できる最善の方法は、関数ポインタまたは関数オブジェクトを関数に渡すことです。 STLは、この多くの例を提供します。考慮:
void out(int x) {
cout << x << ' ';
}
vector<int> xs;
xs.push_back(42);
xs.push_back(23);
for_each(xs.begin(), xs.end(), out);
これは、関数out
へのポインターを関数 for_each
に渡します。
他のヒント
#define superFor(n) for(int i = 0; i < (n); i++)
編集:ループでiという別の変数を使用しないように注意してください。
C ++では、通常のforループでそれを行います。
for(variable; condition; increment) {
//stuff goes here
}
forループ内: 変数はiのようなカウント変数です。ここで変数を定義して初期化できます。あなたはしばしば<!> quot; int i = 0 <!> quot;
のようなものを見ます条件はある種のテストです。あなたの場合、カウント変数がループを実行したい回数よりも少ないかどうかをチェックしたいです。 <!> quot; i <!> lt;のようなものを配置します。 how_many_times_to_loop <!> quot;
incrementは、カウント変数をインクリメントするコマンドです。あなたの場合、<!> quot; i ++ <!> quot;これは<!> quot; i = i + 1 <!> quot;
つまり、次のことがわかります。
for(int i = 0; i < how_many_times_to_loop; i++) {
//stuff goes here
}
クレイジーですが、うまくいくかもしれません...
http://www.boost.org/doc /libs/1_36_0/doc/html/lambda.html 。
マクロを使用できます。
#define superFor(v,i) for(int v=0; v<(i); v++)
次のように使用します:
superFor(i,10) {
printf("Doing something ten times");
}
多分BOOST_FOREACHはあなたが望むことをするでしょう:
http://engineering.meta-comm .com / resources / cs-win32_metacomm / doc / html / foreach.html
void DoSomethingRepeatedly(int numTimesTo Loop)
{
for(int i=0; i<numTimesToLoop; i++)
{
//do whatever;
}
}
それは?それはできません..簡単すぎます..あなたの質問を誤解しているに違いありません:( もちろん、numTimesToLoopの値が<!> gt; = 0であることを確認する必要があります。
編集:念のため、メソッドにしました。