#include <iostream>#include<cstdint>#include<list>#include<string>Template<typename t>TypeName Std::enable_if<std::is_integral<t>::value, std::string>::type to_string (ConstT &val) { returnStd::to_string (val);} Template<typename t>TypeName Std::enable_if<std::is_floating_point<t>::value, std::string>::type to_string (ConstT &val) { returnStd::to_string (val);} Template<typename t>TypeName Std::enable_if<std::is_enum<t>::value, std::string>::type to_string (ConstT &val) { returnStd::to_string (val);} STD::stringTo_string (ConstSTD::string&val) { returnVal;} STD::stringTo_string (Char*val) { returnVal;} Template<typename t>voidBuild_str_list (STD::LIST<STD::string> & RET,ConstT &val) {Ret.push_back (To_string (Val));} Template<typename T, TypeName ... Args>voidBuild_str_list (STD::LIST<STD::string> & RET,ConstT & Head, args&&.. args) {Ret.push_back (to_string (head)); Build_str_list (ret, args ...);} Template<typename ... Args>std::list<STD::string> Build_string_list (args&&.. args) {Std::list<STD::string>ret; Build_str_list (ret, args ...); returnret;} int32_t Main () {int16_t a=1; uint16_t b=2; int32_t C=3; int64_t D=4; uint32_t e=5; uint64_t F=6; STD::stringstr ="Thank"; Const Char* you =" You"; Charbuf[ +] ="ASD"; enum{enum_a=1002, }; Std::list<STD::string> ret = build_string_list ( A,"hehe", A, B, C, D, E, F, str, you, Enum_a,"2323323", BUF); for(ConstSTD::string&Str:ret) {Std::cout<< Str <<Std::endl; } return 0;}
C++11 variable parameter template constructs a string list