#include <algorithm>
#include <iostream>
#include <sstream>
#include <iterator>
#include <vector>
template<typename VarListType>
std::vector<std::string> GetArgStrList(const VarListType &Vars) {
std::vector<std::string> ArgList;
ArgList.reserve(Vars.size());
std::transform(Vars.begin(), Vars.end(), std::back_inserter(ArgList),
[](const auto &Arg) { // C++14
std::stringstream Stream;
Stream << Arg;
return Stream.str();
});
return ArgList;
}
template<typename FirstListType, typename... MoreListTypes>
std::vector<std::string>
GetArgStrList(const FirstListType &Vars,
const MoreListTypes &...MoreVars) {
auto MoreArgStrList = GetArgStrList(MoreVars...);
std::vector<std::string> ArgList;
ArgList.reserve(MoreArgStrList.size() * Vars.size());
for (auto &Var : Vars) {
for (auto &ArgStr : MoreArgStrList) {
std::stringstream Stream;
Stream << Var << " " << ArgStr;
ArgList.push_back(Stream.str());
}
}
return ArgList;
}
int main() {
auto VarA = {5, 6, 7, 8};
auto VarB = {0.3, 0.5};
auto VarC = {"5566", "Energy", "MayDay"};
auto ArgStrList = GetArgStrList(VarA, VarB, VarC);
for (auto &ArgStr : ArgStrList) {
std::cout << "system(exe " << ArgStr << ")" << std::endl;
}
return 0;
}