Evite los bucles forados anidados al buscar espacio de parámetros

Al escribir pruebas unitarias, a menudo quiero invocar una función con una combinación de parámetros. Por ejemplo, tengo una función que se declara como

void tester_func(int p1, double p2, std::string const& p3);

y algunos parámetros seleccionados

std::vector<int> vec_p1 = { 1, 2, 666 };
std::vector<double> vec_p2 = { 3.14159, 0.0001 };
std::vector<std::string> vec_p3 = { "Method_Smart", "Method_Silly" };

Lo que actualmente hago es simplemente

for(auto const& p1 : vec_p1)
    for(auto const& p2 : vec_p2)
        for(auto const& p3 : vec_p3)
            tester_func(p1, p2, p3);

Sin embargo,Sean Parent sugiere evitar bucles explícitos y usarstd:: algoritmos en su lugar. ¿Cómo se podría seguir este consejo en el caso mencionado? Cualquier modismos? ¿Cuál es la forma más limpia de escribir una plantilla variada que hace esto? Cuál es la mejor manerasin características de C ++ 11?

Respuestas a la pregunta(1)

Su respuesta a la pregunta