大佬教程收集整理的这篇文章主要介绍了c – 概念和申报单,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <iostream> #include <String> // Uncomment this declaration to change behavIoUr //void draw(const std::string&); template <typename T> concept bool Drawable() { return requires (const T& t) { { draw(t) } }; } void draw(const std::string& s) { std::cout << s << "\n"; } int main() { static_assert(Drawable<std::string>()); // Fails }
在这里我定义一个简单的概念,Drawable,它的目的是要求给定一个类型为const T&,draw(t)的编译参数.
然后我定义一个函数draw(const std :: String&),它将字符串“绘制”为cout.最后,我检查std :: String是否匹配Drawable概念 – 我本来会期望它,因为在调用static_assert时,适当的draw()函数在范围内.
但是,静态断言失败,除非我在概念定义之前包含一个draw(const std :: String&)声明,而且我不知道为什么.
这是预期的行为与概念,还是我做错了?
template<typename T> concept bool C = requires (T a,T b) { a + b; };
这是一个简单的要求,[exPR.prim.req.simple],它检查表达式的有效性.重写我们的示例以匹配表单:
template<typename T> concept bool Drawable = requires (const T& X) { draw(X); };
我们可以看到我们的语法很好.好的,n4377怎么说?
说得通.我们知道包围的上下文是全局命名空间,所以n4140说什么?
由于这个概念适用于该功能,所以上面的段落适用.
以上是大佬教程为你收集整理的c – 概念和申报单全部内容,希望文章能够帮你解决c – 概念和申报单所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。