3

私はこの方法でC++プログラムを持っています

#include<iostream>

string A();
string B();
string C();

int main()
{
  return 0;
}

A()、B()、C() の 3 つの関数を main() からランダムに呼び出す方法でアプリケーションをテストし、この方法でアプリケーションをテストしたいと考えています。関数を任意の順序でランダムに呼び出すことができる規定または微調整が存在するかどうかはわかりません。

C ++で関数をランダムに呼び出すことは可能ですか?そうであれば、それを行う最良の方法は何ですか?

4

5 に答える 5

10

どのテストが呼び出されるかを制御するために乱数を選択する for ループはどうですか。

for(size_t i = 0; i<NUM_Of_TESTS; ++i) {
  switch(rand() % 3) {
    case 0: A(); break;
    case 1: B(); break;
    case 2: C(); break;
  }
}

このような switch ステートメントを使用すると、さまざまな関数シグネチャを使用できます。

于 2013-10-25T19:51:42.897 に答える
5

関数がすべて同じシグネチャを持っている場合は、関数ポインターの配列を作成できます。

typedef string (*func_ptr)();

func_ptr funcs[3] = { A, B, C };

cout << funcs[rand() % 3]() << endl;
于 2013-10-25T19:52:47.867 に答える
3

すべての関数を関数配列に入れます。

string(*functions[3])() = { A, B, C };

次に、そのインデックスでランダムに呼び出します。

int main()
{
    (*functions[rand() % 3])();
}
于 2013-10-25T19:51:59.883 に答える
2

関数のシグネチャが同じ場合:

関数の配列を宣言する

returnType (*p[3]) (type1 x, type2 y, ...);

乱数発生器のシードを初期化します。

srand (time(NULL));

ループ内で必要な回数だけ関数を呼び出します。

for(i=0; i < MAX_TIME; i++)    
    p(rand() % 2);
于 2013-10-25T19:53:54.627 に答える
2

C++11 の使用:

std::vector<std::function<std::string()>> functions = {a, b, c};
std::cout << functions[rand() % functions.size()]() << std::endl;
于 2013-10-25T20:02:31.860 に答える