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("\b}");
}

// 簡單的測試一下
int main()
{
    print(std::make_pair(102,"sadasd"));
    print('\n');
    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('\n');
    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}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM