美文网首页
C++ 便捷打印变量名和变量值

C++ 便捷打印变量名和变量值

作者: 卡卡罗忒 | 来源:发表于2023-03-29 17:43 被阅读0次

前几天看了下SFINAE,挺有启发,写了一个直接打印变量的宏
效果:


image.png

下面附上代码

//
//  WBUtilMacro.hpp
//  jsonTest
//
//  Created by 王璟鑫 on 2023/3/30.
//
using namespace std;
#include <vector>
#include <iostream>
#pragma once

#define VBLOG(...)\
vblog(#__VA_ARGS__,__VA_ARGS__);

#if __APPLE__
    #ifdef DEBUG
        #define VBDLOG(...)\
        VBLOG(__VA_ARGS__)
    #else
        #define VBDLOG(...)
    #endif
#else
    #ifdef NDEBUG
        #define VBDLOG(...)
    #else
        #define VBDLOG(...)\
        VBLOG(__VA_ARGS__)
    #endif
#endif
vector<string> splitString(const string &str, char sep = ','){
    std::vector<std::string> array;
    std::string::size_type pos1, pos2;
    pos1 = 0;
    pos2 = str.find(sep);
    while (std::string::npos != pos2)
    {
        array.push_back(str.substr(pos1, pos2 - pos1));
        pos1 = pos2 + 1;
        pos2 = str.find(sep, pos1);
    }
    if (pos1 != str.length())
        array.push_back(str.substr(pos1));
    return array;
}

//递归终止函数
template <class T>
string LOG(T &val){
    return "非基本数据类型 ,";
}
string LOG(int &val){
    return std::to_string(val);
}
string LOG(long &val){
    return std::to_string(val);
}
string LOG(long long &val){
    return std::to_string(val);
}
string LOG(unsigned &val){
    return std::to_string(val);
}
string LOG(unsigned long &val){
    return std::to_string(val);
}
string LOG(unsigned long long &val){
    return std::to_string(val);
}
string LOG(float &val){
    return std::to_string(val);
}
string LOG(double &val){
    return std::to_string(val);
}
string LOG(long double &val){
    return std::to_string(val);
}
string LOG(string &val){
    return (val);
}
string LOG(const char* &val){
    return val;
}
template <class T, class ...Args>
string LOG(T &val, Args... args){
    return "非基本数据类型 ," + LOG(args...);
}
template < class ...Args>
string LOG(int &val, Args... args){
    return std::to_string(val) + "," + LOG(args...);
}
template < class ...Args>
string LOG(long &val, Args... args){
    return std::to_string(val) + "," + LOG(args...);
}
template < class ...Args>
string LOG(long long &val, Args... args){
    return std::to_string(val) + "," + LOG(args...);
}
template < class ...Args>
string LOG(unsigned &val, Args... args){
    return std::to_string(val) + "," + LOG(args...);
}
template < class ...Args>
string LOG(unsigned long &val, Args... args){
    return std::to_string(val) + "," + LOG(args...);
}
template < class ...Args>
string LOG(unsigned long long &val, Args... args){
    return std::to_string(val) + "," + LOG(args...);
}
template < class ...Args>
string LOG(float &val, Args... args){
    return std::to_string(val) + "," + LOG(args...);
}
template < class ...Args>
string LOG(double &val, Args... args){
    return std::to_string(val) + "," + LOG(args...);
}
template < class ...Args>
string LOG(long double &val, Args... args){
    return std::to_string(val) + "," + LOG(args...);
}
template < class ...Args>
string LOG(string &val, Args... args){
    return val + "," + LOG(args...);
}
template < class ...Args>
string LOG(const char* &val, Args... args){
    string a = val;
    return  a + "," + LOG(args...);
}
template <class ...Args>
void vblog(string names,Args...args){
    auto nameArr = splitString(names);
    auto valueArr = splitString(LOG(args...));
    string final = "";
    if (nameArr.size() != valueArr.size()) {
        printf("打印函数出bug啦");
        return;
    }
    for(int i = 0; i < nameArr.size(); ++i){
        final.append(nameArr[i]);
        final.append(" = ");
        final.append(valueArr[i]);
        final.append("   ");
    }
    cout << final << endl;
}




好用

相关文章

  • 一月九号

    用户变量: 变量名:opencv 变量值:C:\opencv\opencv\build 变量名:path 变量值:...

  • 变量及检测数据类型

    变量定义var 变量名 = 变量值; 先定义在赋值var 变量名; 变量名 = 变量值; 定义多个变量var 变量...

  • 培训第四天----shell字符串,语法语句

    一、昨日回顾: 遗留问题: printf打印字符串:若变量值中有空格,则打印时应使用 "$变量名"。字符串赋值时,...

  • 【Linux】生物信息软件安装过程

    变量 显示变量值:echo $变量名变量名之前一定要有$符号,echo才能将变量名替换成实际变量值。 PATH存放...

  • JDK环境变量配置

    设置java环境变量 1.创建JAVA_HOME 变量名: 变量值: 2.创建CLASSPATH变量名: 变量值:...

  • Java入门

    认识Java java环境变量 1、变量名java_home变量值(jdk路径)2、变量名path变量值(%Jav...

  • sass入门

    变量 变量定义 $变量名: 变量值; 变量使用 $变量名$变量名不能使用在CSS选择器和属性名中 嵌套规则 普通嵌...

  • python better-exceptions工具

    安装方法 作用 使输出,更好看,出现错误能更直观的看出 变量名和变量值

  • Kotlin学习笔记-数据类型 变量(2)

    var/val 变量名: 数据类型var/val 变量名: = 变量值 类型推导 kotlin 有类型推导机制 声...

  • 2.变量

    变量 yy=123 yy是一个变量名 123是变量值echo $yy 输出变量值 变量设定的规则 ...

网友评论

      本文标题:C++ 便捷打印变量名和变量值

      本文链接:https://www.haomeiwen.com/subject/xnwfddtx.html