我写了一个函数来打印给定的 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_ptr
的 vector
提供给函数时,它会打印地址,但不会打印指向的值。
当元素是 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/