首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++11 static_assert:参数化错误消息

C++11 static_assert:参数化错误消息
EN

Stack Overflow用户
提问于 2012-06-15 12:18:32
回答 2查看 5.7K关注 0票数 9

我以前的问题中,我希望使用static_assert将模板参数限制为特定的子类型。有人回答了这个问题,归档的代码如下:

代码语言:javascript
运行
复制
template <typename T> 
struct X { 
    static_assert(std::is_base_of<Y,T>::value,"T must be derived from Y!");
};

现在,我想使错误信息更加简洁。也就是说,我想说明哪种类型违反了这个约束。例如,如果类A不是从Y派生的,并且有人实例化了X<A>,那么错误消息应该打印“类型参数必须从Y派生,但A不是”。

这在标准库中是可以实现的吗?

我看到两个挑战:

  • 在编译时不使用boost::mpl组装字符串
  • 检索实例化T的类型的名称。名称应该是有意义的,理想情况下与违反定义时使用的名称相同。我尝试了typeid(T).name(),但它只返回错误的名称,这是不可接受的。我记得有某种宏返回某物的名称,但我再也不记得了。
EN

Stack Overflow用户

回答已采纳

发布于 2012-06-15 12:23:16

你不能这么做。static_assert需要一个字符串文本。您无法将TY的语义标识组装到字符串文本中。

您可以希望编译器能够轻松地读取模板实例化堆栈的回溯跟踪,并给出封装类模板实例化的TY模板参数的值。

其他人也考虑到了这一点,例如,参见http://comments.gmane.org/gmane.comp.compilers.clang.devel/5073

票数 8
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11050511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档