C++ 获取变量名称 & 获取类型的名称
本文转载自:http://cherishlc.iteye.com/blog/1750013
1、获取变量名称
采用如下宏定义即可,这个宏定义将表达式x直接转换为对应的字符串:
#define varName(x) #x #define printExp(exp) cout<<#exp<<"为: "<<(exp)<<endl #define printExpToString(exp) cout<<(string(#exp)+"为: ")<<(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<<"为: "<<(exp)<<endl #define printExpToString(exp) cout<<(string(#exp)+"为: ")<<(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; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: C++中判断数据类型的函数
- 下一篇: C/C++中检查变量类型函数typeid()