字符串化模板参数
是否可以获得模板参数名称的字符串化版本?
像这样,如果我们运行预处理器的话:
template <typename T>
struct Named{
const char* name(){ return "Named<" #T ">"; }
};
编辑 复制。看这里 字符串化模板参数
Is it possible to get a stringified version of a template argument name?
Something like this, if only we were running the preprocessor:
template <typename T>
struct Named{
const char* name(){ return "Named<" #T ">"; }
};
Edit
Duplicate. See here
Stringifying template arguments
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不。您可以拥有的最接近的东西是
typeid(T).name()
。然而,其结果是未指定的,即使是为所有类型返回空字符串的实现也是一致的。不过,出于调试目的,它通常就足够了。No. The closest thing you can have is
typeid(T).name()
. However, the result of this is unspecified, even an implementation which returned empty strings for all types would be conforming. For debugging purposes it often is sufficient, though.您是否按照字符串化模板参数中的建议尝试过
typeid()
?Have you tried
typeid()
as suggested in Stringifying template arguments ?并非没有痛苦。我最接近的解决方案:
当然,这是邪恶的......
到目前为止,您可以使用
gccxml
和xsltproc
自动找到未实现的Named::name()
,创建一些辅助文件,编译它,最后链接它:一些建议 Named.xslt 文件(不知道是否有效):
Not without pain. My closest solution:
Of course, this is evil...
so far you could use
gccxml
andxsltproc
to automatic find unimplementedNamed<T>::name()
, create some auxilary file, compile it, and finally link it:Some proposal Named.xslt file (duno if work):