先看实例(示例不追求编译合法性,只表达某些用法含义)
class CTest{
}
void main(){
std::string s1 = #CTest; // s1="CTest"
my##CTest; // 结果是myCTest
}
很明显,#是把符号转变成字符串;
##是连接
常用于宏定义
结合以下例子,应该很容易理解:
#define DEFAULT_FUNC(__Cls) std::string GetClassName(){ return #__Cls; }
#define DEFAULT_REGISTER(__Cls) _register_##__Cls(){}
class CTest{
public:
DEFAULT_FUNC(CTest)
DEFAULT_REGISTER(CTest)
}
void main(){
CTest t;
std::string sName = t.GetClassName();
t._register_CTest();
}