c++ - 使用模板函数打印智能指针 vector

标签 c++ c++11 vector smart-pointers

我写了一个函数来打印给定的 vector

template <typename T>
void print_vector(std::string text, std::vector<T> &vect){
    std::cout << ">>>>>>>>>> " << text << " <<<<<<<<<<" << std::endl;
    for(T &t: vect){
        std::cout << t << ", ";
    }
    std::cout << std::endl << "--------------------" << std::endl;
}

但是当我将 shared_ptrvector 提供给函数时,它会打印地址,但不会打印指向的值。

当元素是 shared_ptr 时,有没有办法打印值..?
我尝试了以下方法,但它给了我一个编译错误,我不知道如何修复它。

template <typename T, typename F>
void print_vector(std::string text, std::vector<T> &vect){
    std::cout << ">>>>>>>>>> " << text << " <<<<<<<<<<" << std::endl;
    for(T &t: vect){
        if(std::is_same<T, std::shared_ptr<F>>::value) {
            std::cout << *t << ", ";
        } else {
            std::cout << t << ", ";
        }
    }
    std::cout << std::endl << "--------------------" << std::endl;
}

最佳答案

为智能指针 vector 重载函数。

template <typename T>
void print_vector(std::string text, std::vector<T> &vect){
    std::cout << ">>>>>>>>>> " << text << " <<<<<<<<<<" << std::endl;
    for(T &t: vect){
        std::cout << t << ", ";
    }
    std::cout << std::endl << "--------------------" << std::endl;
}

template <typename T>
void print_vector(std::string text, std::vector<std::shared_ptr<T>> &vect){
    std::cout << ">>>>>>>>>> " << text << " <<<<<<<<<<" << std::endl;
    for(auto &t: vect){
        std::cout << *t << ", ";
    }
    std::cout << std::endl << "--------------------" << std::endl;
}

如果您在更多情况下希望打印不同的内容,您可能会发现某些重载不明确,您可能必须在它们应该相互匹配时禁用不明确的模板。

关于c++ - 使用模板函数打印智能指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49235651/

相关文章:

c++ - C++/C++11 中的函数组合

使用不同的输入(数组)调用 C++ 相同的函数,如何缩小我的语句?

c++ - 在 C++ 中对大量元素进行分组的最快方法

两个不同 vector 中的 C++ 相同对象

c++ - 如何保存这个 vector 图

c++ - 如何删除不断改变其大小的 vector 的一系列元素(C++)?

c++ - 为什么我总是在 C++ 中得到奇怪的输出

c++ - 具有覆盖 C++ 的最大大小的堆栈

c++ - 用于存储大量索引的数据结构,每个索引指向一个集合

c++ - 无法重载自定义 PriorityQueue 的提取运算符