3

我有一个以这种方式的 C++ 程序

#include<iostream>

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

int main()
{
  return 0;
}

我想通过使用三个函数 A()、B() 和 C() 来测试应用程序,以便我从 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 回答