在C ++程序中随机调用函数

时间:2013-10-25 19:49:08

标签: c++

我有这种方式的C ++程序

#include<iostream>

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

int main()
{
  return 0;
}

我想通过使用三个函数A(),B()和C()来测试应用程序,这样我就可以从main()中随机调用它们,这样我就可以测试应用程序了。我不知道是否有任何条款或任何调整可以让我随机调用任何顺序的函数。

C ++中是否可以随机调用函数,如果是,那么最好的方法是什么?

5 个答案:

答案 0 :(得分:9)

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语句可以允许不同的函数签名。

答案 1 :(得分:5)

如果函数都具有相同的签名,则可以创建一个函数指针数组。

typedef string (*func_ptr)();

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

cout << funcs[rand() % 3]() << endl;

答案 2 :(得分:3)

将所有函数放在函数数组中:

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

然后通过索引随机调用一个:

int main()
{
    (*functions[rand() % 3])();
}

答案 3 :(得分:2)

如果您的功能具有相同的签名:

声明一个函数数组

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

初始化随机数生成器的种子:

srand (time(NULL));

在循环中多次调用函数:

for(i=0; i < MAX_TIME; i++)    
    p(rand() % 2);

答案 4 :(得分:2)

使用C ++ 11:

std::vector<std::function<std::string()>> functions = {a, b, c};
std::cout << functions[rand() % functions.size()]() << std::endl;