C++ 函数模板print

简述

在知乎看到文章leetcode 的奇怪 println vector 工具,于是手痒自己也写了一个print函数。

因为工作中没有需要写这种代码的情况,所以好久没有写这种代码了,还是挺怀念以前学习编程的日子的,无忧无虑,每解决一个问题都很快乐。

代码

#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <string>
#include <iterator>

// 最基本实现
template<typename T>
void print(T t)
{
    std::cout<<t;
}
// 处理 std::pair 
template<typename Kt,typename Vt>
void print(std::pair<Kt,Vt> kv)
{
    print(kv.first);
    print(" = ");
    print(kv.second);
}

// 对 std::string 特殊处理
// 注释掉可以按照序列输出了
void print(std::string s)
{
    std::cout<<s;
}

// 处理各种序列容器(vector/list/map ...)
template<typename T,typename AllocT,template<typename,typename...> typename SequenceT>
void print(SequenceT<T,AllocT> seq)
{
    print("{ ");
    for(auto iter = std::begin(seq);iter != std::end(seq);iter = std::next(iter)) {
        print(*iter);
        print(",");
    }
    print("}");
}

// 简单的测试一下
int main()
{
    print(std::make_pair(102,"sadasd"));
    print('
');
    std::vector<std::vector<int> > vec{
        {3,5,4},
        {2,67},
        {4,6}};
    print(vec);
    std::list<float> l{1.2f,4.3f,6.1f,1.5f};
    print(l);
    print('
');
    std::map<int,std::string> m{
        {1,"one"},
        {0,"zero"},
        {2,"two"},
    };
    print(m);
    return 0;
}

编译输出

# 编译
clang++ test.cpp
# 执行
./a.out
102 = sadasd
{ { 3,5,4},{ 2,67},{ 4,6}}{ 1.2,4.3,6.1,1.5}
{ 0 = zero,1 = one,2 = two}
原文地址:https://www.cnblogs.com/oloroso/p/11949445.html