这只需要用g ++工作.
我想要一个功能
template<typename T> std::string magic();
Run Code Online (Sandbox Code Playgroud)
这样:
Class Foo{}; magic<Foo>(); // returns "Foo";
Class Bar{}; magic<Bar>(); // returns "Bar";
Run Code Online (Sandbox Code Playgroud)
我不希望这是通过专业化来完成的(即必须为每种类型定义魔法.我希望在这里拉出一些宏/模板黑魔法.任何人都知道怎么做?)
谢谢!
sth*_*sth 10
要将类型(或其他标识符)转换为字符串,您需要一个宏,但宏不能检查它的参数是否是有效类型.要添加类型检查,可以将模板函数添加到宏中:
template<typename T>
std::string magic_impl(const char *name) { return name; }
#define more_magic(a) magic_impl<a>(#a)
#define magic(a) more_magic(a)
Run Code Online (Sandbox Code Playgroud)
这里magic(int)
给出了字符串,"int"
而如果没有这样的类则magic(Foo)
给出"'Foo'未被声明"错误.
归档时间: |
|
查看次数: |
3633 次 |
最近记录: |