变参函数

变参函数

变参数处理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;
//}

 

posted @ 2024-12-17 11:34  玥茹苟  阅读(4)  评论(0编辑  收藏  举报