随手撸一个简单的带检查的printf
#include <stdio.h>
#include <iostream>
#include <vector>
#include <string>
#include <cassert> template<typename T> std::string t() { return "?"; }
template<> std::string t<const char *>() { return "s"; }
template<> std::string t<char>() { return "c"; }
template<> std::string t<int>() { return "d"; }
template<> std::string t<unsigned>() { return "u"; }
template<> std::string t<float>() { return "f"; }
template<> std::string t<double>() { return "lf"; } template<typename T>
std::vector<std::string> operator+(std::vector<std::string> chs, T val)
{
chs.push_back(t<T>());
return chs;
} template<typename... T>
std::vector<std::string> ty2ch(T... vals)
{
return (std::vector<std::string>{} + ... + vals);
} std::vector<std::string> format2ch(const char* str)
{
std::vector<std::string> ret; while (*str != '\0')
{
if (*str == '%')
{
if (*(str + ) != '\0' && *(str + ) != '\0' && *(str + ) == 'l' && *(str + ) == 'f')
{
ret.push_back("lf");
goto b;
}
if (*(str + ) != '\0')
{
ret.push_back(std::string{*(str+)});
goto b;
}
}
b:
++str;
}
return ret;
} template<typename... T>
int Tprintf(const char* format, T... vals)
{
auto ch_format = format2ch(format);
auto ch_vals = ty2ch(vals...);
assert(ch_format == ch_vals); return printf(format, vals...);
} int main(int argc, char *argv[])
{
Tprintf("this is a string %s", "hahah"); return ;
}
随手撸一个简单的带检查的printf的更多相关文章
- 给 asp.net core 写一个简单的健康检查
给 asp.net core 写一个简单的健康检查 Intro 健康检查可以帮助我们知道应用的当前状态是不是处于良好状态,现在无论是 docker 还是 k8s 还是现在大多数的服务注册发现大多都提供 ...
- 撸一个简单的vue-router来剖析原理
理解 随着前端业务的发展, 我们一般在写一个较为大型的vue项目时候,会使用到vue-router,来根据指定的url或者hash来进行内容的分发,可以达到不像服务端发送请求,就完成页面内容的切换,能 ...
- avalon实现一个简单的带增删改查的成绩单
自从angular问世,一直就有去了解学习angular,一直想用angular去做一个项目,但无奈,大ng是国外产物,ng1.2版本就只兼容到IE8,1.3后的几个版本提升到IE9,据说NG2.0更 ...
- 撸一个简单的MVVM例子
我个人以为mvvm框架里面最重要的一点就是VM这部分,它要与Model层建立联系,将Model层转换成可以被View层识别的数据结构:其次也要同View建立联系,将数据及时更新到View层上,并且响应 ...
- 徒手撸一个简单的RPC框架
来源:https://juejin.im/post/5c4481a4f265da613438aec3 之前在牛逼哄哄的 RPC 框架,底层到底什么原理得知了RPC(远程过程调用)简单来说就是调用远程的 ...
- 一个简单的带缓存http代理
眼下1.0版模型非常easy.即对客户机发来的请求进行简单处理后,转发到server.转发之前先检查本地缓存.假设有.则直接回送给客户本地资源 程序流程大致例如以下图: 缓存是通过把文件保存到磁盘上, ...
- 【RPC】手撸一个简单的RPC框架实现
涉及技术 序列化.Socket通信.Java动态代理技术,反射机制 角色 1.服务提供者:运行在服务端,是真实的服务实现类 2.服务发布监听者:运行在RPC服务端,1将服务端提供的 ...
- 【mpvue】使用Mpvue撸一个简单的小程序
一.快速创建一个mpvue项目 全局安装 vue-cli (如果有就不需要装了) 创建一个基于mpvue-quickstart模板的新项目,记得选择安装vuex vue init mpvue/ ...
- iOS - 一个简单的带标题的图标的实现
代码不复杂,直接上代码: ImageViewButton.h // // ImageViewButton.h// // 带有图片.底部标题或者顶部的按钮 // // #import <UIKit ...
随机推荐
- php面向对象理解(一)
常用的继承过程,以及对public.private.protected修饰符的理解: /*****************************父类************************* ...
- Exchange Onine 公用文件夹
公用文件夹专为共享访问设计,为收集.组织信息及工作组织中的其他人共享信息提供提供了一种轻松.有效的方式.公用文件夹帮助以易于浏览的层次结构来组织内容. 一.公用文件夹的适用环境 公用文件夹在以下out ...
- 二十七、rsync同步工具
1.什么是rsync? Rsync是一款开源的.快速的,多功能的,可实现全量及增量的本地或者远程数据同步备份的优秀工具.windows和linux都可以. 官网:http:www.samba.org/ ...
- python,PyAutoGUI,设置鼠标键盘自动操作
三个文件需在同一个文件夹下面,文件夹的位置无要求. 1.第一个文件,trial.py.python代码调用PyAutoGUI操作鼠标键盘,可以通过修改start_time和end_time来确定程序自 ...
- RAID和LVM
EXT家族支持度最广,但创建文件系统慢修复慢存储容量有限 XFS同样是日志文件系统:容量大,支持大存储高性能,创建/修复文件系统快inode与block都是系统需要用到时,才动态配置产生 基本分区(静 ...
- 忘记mysql root用户密码的解决办法(skip-grant-tables)
skip-grant-tables顾名思义,数据库启动的时候 跳跃权限表的限制,不用验证密码,直接登录. 注意: 这种情况只有在忘记root密码 不得已重启数据库的情况下使用的.现网环境慎用,需要重启 ...
- github傻瓜的食用方法
配置Git 首先在本地创建ssh key: 1 $ ssh-keygen -t rsa -C "your_email@youremail.com" 后面的your_email@yo ...
- put out|smashed|As soon as|provided
CONJ-SUBORD 如果:假如:只要If you say that something will happen provided or provided that something else h ...
- javaee验证码如何使用
首先需要导入jar包 ValidateCode.jar 110 25 为验证码框的大小 4为验证码数目 9为干扰线条数 Servlet代码如下 运行截图如下
- [LC] 359. Logger Rate Limiter
Design a logger system that receive stream of messages along with its timestamps, each message shoul ...