变参函数
变参函数
变参数处理vector问题
#include <iostream> #include <vector> #include <string> #include <type_traits> std::stringstream ss; // 判断是否为 vector 的辅助结构 template<typename T> struct is_vector : std::false_type {}; template<typename T, typename A> struct is_vector<std::vector<T, A>> : std::true_type {}; void process() { std::cout << "No arguments" << std::endl; std::cout << ss.str() <<"\n"; } // 处理 vector 的函数 template<typename T> void recordElement(T&& element) { if (typeid(element) == typeid(std::string)) { ss << "\"" << element << "\", "; } else { ss << element << ", "; } } template<typename T, typename... Args> void process(T&& first, Args&&... args) { if constexpr (is_vector<std::decay_t<T>>::value) { for (const auto& element : first) { recordElement(element); } } else { recordElement(first); } process(std::forward<Args>(args)...); } // 变参函数,接受任意数量的参数 template<typename... Args> void recordFunctionArgs(Args&&... args) { // 遍历参数 process(std::forward<Args>(args)...); } int main() { std::vector<int> vec1 = { 1, 2, 3 }; std::vector<std::string> vec2 = { "dsgdfhg", "asfasf", "wetytru"}; int x = 10; recordFunctionArgs("sdgdsg", vec1, vec2, x); // 可以同时处理 vector 和其他类型的参数 return 0; }
//// 基本的处理函数 //void process() { // std::cout << "No arguments" << std::endl; //} // //// 展开参数包的递归函数 //template<typename T, typename... Args> //void process(T&& first, Args&&... rest) { // if (typeid(first) == typeid(std::string)) { // std::cout << "string: " << std::endl; // } // else if (typeid(first) == typeid(const char)) { // std::cout << "char: " << std::endl; // } // else if (typeid(first) == typeid(double)) { // std::cout << "double: " << std::endl; // } // else if (typeid(first) == typeid(int)) { // std::cout << "int: " << std::endl; // } // else if (typeid(first) == typeid(std::vector<int>)) { // std::cout << "vector: " << std::endl; // for (auto& em : first) // { // std::cout << em << "\n"; // } // } // else if (typeid(first) == typeid(std::vector<double>)) { // std::cout << "vector: " << std::endl; // } // else if (typeid(first) == typeid(std::vector<std::string>)) { // std::cout << "vector: " << std::endl; // } // else{ // std::cout << "null: " << std::endl; // } // // process(std::forward<Args>(rest)...); // 递归处理剩余参数 //} // //int main() { // std::vector<int> dfhf = { 1,2,3 }; // std::string dd("Hello"); // process(dfhf); // 可以处理不同类型和数量的参数 // return 0; //}