是否有一个宏可以返回(理想情况下是 aconst char*
或确实是cont char *const
)其参数的类型名或有关它的一些信息?
这是在编译时,而不是运行时,所以 C++ 的 typeinfo 不会。-fno-rtti
反正我跑。
没有。
C++11 确实__func__
在函数定义中有标识符,它会生成一个带有函数名的字符串变量。大多数 C++ 编译器对此都有变体,以具有“修饰”的函数名称。
而不是写
cout<<mysteryMacro(std::string<wchar>);
你可以写
cout<<"std::string<wchar>";
我看到的唯一目的是在模板中获取类型信息,例如:
template<T>
void printT() {
cout << "T is of type"<<mysteryMacro(T);
}
否则你会自动知道代码。
这可以通过模板专业化来实现。
免责声明:这是未经测试的,只是对应该工作的提示。我不认为这是一个好的解决方案。我相信您可以将其转换为返回字符串而不是打印。关于你需要这个的更多输入会很棒。
template<T>
void printT() {
code that generates compile error, so you see that you have an undefined type
}
template<>
void printT<string>() {
cout << "you have a <string>";
}
如果您想将模板用于变量,您将不得不依赖自动模板参数推导,如下所示:
template<>
void printT<string>(T) {
cout << "you have a <string>";
}
并像这样使用它
int x;
printT(x);
尽管我不知道为什么,因为如前所述,除非您在模板中,否则您将在编写代码时知道类型,而在模板中,类型在模板参数中传达,因此知道(不是字符串),您总是可以编写printT<T>()