作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码在调用模板函数时打印出字符串“T”,而不是实际的类型名称。有没有办法在不向正在模板化的类型中添加任何内容的情况下获取真实的类型名?
#define stringify(a) #a
#define tostring(a) stringify(a)
template <typename T>
void function_foo(T a, T b)
{
cout << tostring(T) << endl;
...
}
最佳答案
模板不是那样工作的。在您的模板中,T
指定一个类型,而不是一系列标记:
typedef int lolztype;
typedef int lulztype;
function_foo<lolztype>(0, 0);
function_foo<lulztype>(0, 0); // calls the *same* template
无法分别获取lolztype
或lulztype
。您可以尝试使用 typeid(T).name()
,但这不是很有用,因为它不需要人类可读,甚至不需要区分每种类型。
您可以尝试使用 geordi's文件 type_strings.hpp
,它可以在使用 GCC 编译时打印出人类可读的字符串。
关于c++ - 如何将模板化的类型名作为字符串获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4519596/
我是一名优秀的程序员,十分优秀!