gpt4 book ai didi

C++11 static_assert : Parameterized error messages

转载 作者:可可西里 更新时间:2023-11-01 17:42:08 28 4
gpt4 key购买 nike

my previous question我想使用 static_assert 将模板参数限制为特定的子类型。问题回答完毕,归档代码如下:

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() 但它只返回 Not Acceptable 损坏名称。我记得有某种宏可以返回某物的名称,但我不记得了。

最佳答案

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

您可以希望编译器提供易于阅读的模板实例化堆栈回溯,并为您提供封闭类模板的 TY 模板参数的值实例化。

其他人也考虑过这个问题,参见 http://comments.gmane.org/gmane.comp.compilers.clang.devel/5073例如。

关于C++11 static_assert : Parameterized error messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11050511/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com