
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循环所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)