C++ 获取变量名称 & 获取类型的名称

本文转载自:http://cherishlc.iteye.com/blog/1750013


1、获取变量名称 

采用如下宏定义即可,这个宏定义将表达式x直接转换为对应的字符串: 

#define varName(x) #x
#define printExp(exp) cout<<#exp<<"为:\t\t"<<(exp)<<endl
#define printExpToString(exp) cout<<(string(#exp)+"为:\t\t")<<(exp).toString()<<endl //注意exp加括号更安全

用法:

out<<varName(aInt)<<endl; \\输出为:  aInt  

2、获取类型名称  
采用如下宏定义即可,这个宏定义将表达式x直接转换为对应的字符串:  

//可能需要#include <typeinfo>  好像不引用也成  
cout<<typeid(int).name()<<endl;  
更多的用法见最后的程序; 
先看一下输出:  



3、完整的程序: 

#include <string>
#include <sstream>
#include <iostream>
using namespace std;

#define varName(x) #x
#define printExp(exp) cout<<#exp<<"为:\t\t"<<(exp)<<endl
#define printExpToString(exp) cout<<(string(#exp)+"为:\t\t")<<(exp).toString()<<endl //注意exp加括号更安全

namespace LC {
	template<typename T> class Base {
	public:
		virtual string toString() {
			stringstream ss;
			ss << typeid(*this).name();
			return ss.str();
		}

		Base operator+(int a) {
			return *this;
		}
	};

	template<typename T> class Derived : public Base<T> {
	public:
		virtual string toString() {
			stringstream ss;
			ss << typeid(*this).name();
			return ss.str();
		}
	};
}

typedef LC::Base<double> BaseDouble;

typedef LC::Derived<int> DerivedInt;

int main(int argc, char** argv)
{
	int aInt = 1;
	printExp(aInt);
	printExp(typeid(int).name());
	printExp(typeid(aInt).name());
	cout << "变量名称为:" << varName(aInt) << endl;

	cout << endl;
	BaseDouble base;
	printExpToString(base);
	printExpToString(base + 5 + 4);//若定义中exp不加括号就无法编译了
	printExpToString((LC::Base<int>)DerivedInt());

	cout << endl;
	DerivedInt derived;
	LC::Base<int>* pBase = &derived;
	LC::Base<int> baseCast = derived;
	printExpToString(*pBase);
	printExpToString(derived);
	printExpToString(baseCast);

	printExp(typeid(*pBase) == typeid(derived));
	printExp(typeid(baseCast) == typeid(derived));

	system("pause");
	return 0;
}


  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值