c – 搜索参数空间时避免使用嵌套的for循环

c – 搜索参数空间时避免使用嵌套的for循环,第1张

概述在编写单元测试时,我经常想要使用参数组合来调用函数.例如,我有一个声明为的函数 void tester_func(int p1, double p2, std::string const& p3); 和一些选定的参数 std::vector<int> vec_p1 = { 1, 2, 666 };std::vector<double> vec_p2 = { 3.14159, 0.0001 }; 在编写单元测试时,我经常想要使用参数组合来调用函数.例如,我有一个声明为的函数

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

和一些选定的参数

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" };

我目前所做的很简单

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

但是,Sean Parent建议避免使用显式循环并使用std :: algorithms.如何在上述案例中遵循这一建议?有成语吗?编写可执行模板的变量模板的最简洁方法是什么?没有C 11功能的最佳方法是什么?

解决方法 @Oberon在评论中提到了非常好的解决方案.

但我认为这个问题有很多不同的解决方案.这是我的解决方案:

#include <tuple>#include <type_traits>template <class TestFunction,class... Containers,class... Types>typename std::enable_if<sizeof...(Containers) == sizeof...(Types)>::typeTestNextLevel    (        TestFunction testFunction,const std::tuple<Containers...>& containersTuple,const Types&... parameters    ){    testFunction(parameters...);}template <class TestFunction,class... Types>typename std::enable_if<(sizeof...(Containers) > sizeof...(Types))>::typeTestNextLevel    (        TestFunction testFunction,const Types&... parameters    ){    for (const auto& element : std::get<sizeof...(Types)>(containersTuple))    {        TestNextLevel(testFunction,containersTuple,parameters...,element);    }}template <class TestFunction,class... Containers>voID TestAllCases    (        TestFunction testFunction,const Containers&... containers    ){    TestNextLevel        (            testFunction,std::tuple<const Containers&...>(containers...)        );}

使用示例:

TestAllCases(tester_func,vec_p1,vec_p2,vec_p3);
总结

以上是内存溢出为你收集整理的c – 搜索参数空间时避免使用嵌套的for循环全部内容,希望文章能够帮你解决c – 搜索参数空间时避免使用嵌套的for循环所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1227070.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存