C++ で非常に単純なことをしたいのですが、方法が見つかりません。forループのような関数を作成したいのですが、理想的には、反復が発生する時間の変数を入力し、関数が実行される括弧内のいくつかの関数を入力します。私が十分に明確だったことを願っています。ありがとう...
例
superFor (1)
{
//commands to be executed here
add(1+2);
}
#define superFor(n) for(int i = 0; i < (n); i++)
編集: ループ内で i という別の変数を使用しないように注意してください。
C++ では、(現在のバージョンの) 言語には、ここで必要ないくつかの機能、つまり関数ブロックを「その場で」作成する機能がないため、あなたが望むことは不可能です。
最善の方法は、関数ポインターまたは関数オブジェクトを関数に渡すことです。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
。
C++ では、通常の for ループでそれを行います。
for(variable; condition; increment) {
//stuff goes here
}
あなたの for ループでは: variable は、i のようなカウント変数です。ここで変数を定義して初期化できます。「int i = 0」のようなものをよく見かけます
状態はある種のテストです。あなたのケースでは、カウント変数がループを実行する回数よりも少ないかどうかを確認したいと考えています。「i < how_many_times_to_loop」のようなものを入れます
increment は、カウント変数をインクリメントするコマンドです。あなたの場合、「i = i + 1」の簡単な言い方である「i++」が必要です
したがって、次のようになります。
for(int i = 0; i < how_many_times_to_loop; i++) {
//stuff goes here
}
クレイジーですが、うまくいくかもしれません...
マクロを使用できます。
#define superFor(v,i) for(int v=0; v<(i); v++)
次のように使用します。
superFor(i,10) {
printf("Doing something ten times");
}
void DoSomethingRepeatedly(int numTimesTo Loop)
{
for(int i=0; i<numTimesToLoop; i++)
{
//do whatever;
}
}
そのこと ?それはできません..単純すぎる..私はあなたの質問を誤解しているに違いありません:(もちろん、numTimesToLoopの値が> = 0であることを確認する必要があります.
編集:念のため、メソッドにしました。
多分 BOOST_FOREACH はあなたが望むことをします:
http://engineering.meta-comm.com/resources/cs-win32_metacomm/doc/html/foreach.html