栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++20 -通用打印的一般实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++20 -通用打印的一般实现

对于常见数据类型通用打印支持
整形
浮点型
字符串类型,char

vector 包括多维度数组
map
set
T ah[N] 类型数组,包括多维数组
array多维度数组
*

main.cpp

// C
#ifndef _GLIBCXX_NO_ASSERT
#include 
#endif
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#if __cplusplus >= 201103L
#include 
#include 
#include 
// #include 
#include 
#include 
#include 
#include 
#include 
#endif
// C++
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#if __cplusplus >= 201103L
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#endif

using namespace std;

template 
concept isPrintable = requires(T t) {
    cout << t;
};

// 是否支持 inplace loop for
template 
concept LoopAble = requires(T t) {
    // t 有begin()函数 且能 前++, 注意operator++(int) 是后++
    // 约束 1
    ++t.begin();
    // t.begin() 的类型支持 *
    // 约束 2
    *(t.begin());
    // t 有end函数
    // 约束 3
    t.end();
    // t.begin() 的类型 支持 !=
    // 约束 4
    t.begin() != t.end();
};

template 
concept PairAble = requires(T&& t) {
    t.first;
    t.second;
};

template 
concept ArrayLike = requires(T t) {
    size(t)->size_t;
};

// 特化
void printer(char* buffer, bool end = true) {
    cout << buffer << "t";
    if (end) {
        cout << endl;
    }
}

// 特化
void printer(const string& buffer, bool end = true) {
    cout << buffer << "t";
    if (end) {
        cout << endl;
    }
}

template