2

是否有一个宏可以返回(理想情况下是 aconst char*或确实是cont char *const)其参数的类型名或有关它的一些信息?

这是在编译时,而不是运行时,所以 C++ 的 typeinfo 不会。-fno-rtti反正我跑。

4

2 回答 2

2

没有。

C++11 确实__func__在函数定义中有标识符,它会生成一个带有函数名的字符串变量。大多数 C++ 编译器对此都有变体,以具有“修饰”的函数名称。

于 2013-06-06T16:28:42.990 回答
-1

而不是写

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>()

于 2013-06-06T16:29:50.140 回答