我想在编译时从类中获取字符串,但如果该类在该范围内不存在,也会想要一个错误,所以这还不够:
#define CLASS_STR(c) # c
我想我可以将后期构建脚本编写为某种静态分析器。
一个例子是libextobjc http://devetc.org/code/2014/05/17/safe-and-sane-key-paths.html
中的密钥路径检查真的应该很容易掌握。不应该编写“MyClass”,而应该使用一个可以在字符串中返回类名的宏,同时还要确保该类在范围内可见。
答案 0 :(得分:0)
这是一种方法:
#include <iostream>
#include <MyLib/MyClass.h>
#define CLASS_STR(__class__) \
({ \
__class__ *x;\
#__class__ ;\
})
int main(int argc, char* argv[]) {
auto className = CLASS_STR(MyClass);
std::cout << className << std::endl;
return 0;
}
请注意,如果我将MyKlass
传递给宏,它将无法初始化指针,所以现在我有一个编译时检查该类是否可用。检查后,我得到一个字符串,保证代表该类。
当然,可以轻松地重新定义发布版本的宏以执行字符串化。