c++-concepts相关内容
我正在学习概念,我想不出约束非类型模板参数的值(非类型)的方法。 Example编译的代码,尽管我希望它不会(由于失败的要求): #include enum Bla{ Lol, Haha }; template requires requires{ // my guess is that this just checks
..
在Rust中,抽象的主要工具是特征。在C++中,有两种抽象工具:抽象类和模板。为了摆脱使用模板的一些缺点(例如,难以读取错误消息),C++引入了概念,它们是"named sets of requirements"。 这两个功能似乎非常相似: 定义特征/概念是通过列出需求来完成的。 两者都可用于绑定/限制泛型/模板类型参数。 Rust特征和带有概念的C++模板都是单一化的(我知道Ru
..
我正在学习C++概念,我有一个讨厌的问题: 我不知道如何区分成员变量是int类型的变量和成员变量是int&类型。 原因是我正在使用的检查使用的是instance.ember语法,而在C++中,它返回一个引用。 完整示例: #include #include template void print(T t)
..
是否已定义概念,用于在C++20或Range-TS中指定特定类型的范围? 类似: template concept RangeOf = requires(T&& t) { requires std::same_as
..
In my question我收到了适合我的答复,但我不知道它是如何工作的。 尤其是,我不明白delete关键字和概念是如何删除operator
..
如何将此问题link中的要求转换为概念 我尝试了以下操作: template concept MyConditions = ( U::value_type && Tin::value_type && Tout::value_type
..
using T = decltype(std::same_as) 我已经在VS2019上试过了。结果是T = bool。 这是由标准定义的,还是仅由特定编译器定义的属性? 我还没有找到关于这件事的任何官方消息。 https://en.cppreference.com/w/cpp/concepts 推荐答案 AConcept-idLikestd::same
..
新发布的草案[expr.prim.req]/6中提到: 如果将模板参数替换为要求将 总是导致替换失败,程序格式错误;否 需要诊断。[ ;示例: template concept C = requires { new int[-(int)sizeof(T)]; // ill-formed, no diagnostic required };
..
由于模板和动态多态不能很好地融合,我目前正在为Loggable类型设计一个概念,而不是一个接口(用抽象类实现),它支持操作: logger.log(LogLevel::info)
..
我正在尝试实现一个小型网络库来学习概念,并且我正在尝试找到一种方法来定义简洁的概念,而不必在依赖的概念上携带模板参数。例如,我有以下概念: template concept bool Value = true; template concept bool Buffer = requires(BufferT buf)
..
正在尝试实现the following code: template concept SizedRangeOf = std::ranges::sized_range && std::same_as, V>; template cons
..
假设我正在编写一个类模板,其某些成员受类型模板参数静态常量数据成员的存在和值的约束: template struct A { constexpr bool operator()() requires T::value { return T::value; } constexpr bool operator()() { return false; } }; #
..
我想知道std::same_as是如何定义的,以及我们如何在概念或要求中使用它。 示例: void f1() { } bool f2() { return true; } template void Do( T func ) { if constexpr ( requires { { func() } -> std::same_as;
..
我在阅读一些概念定义时,多次发现术语等于,如Swappable: 让t1和t2为保持相等表达式,这些表达式表示类型为T的不同的相等对象, 等于是否在标准中的某个位置定义?我猜想这意味着两个对象的语义或它们引用的值(赋予它们表示的域值的人类语义)是相同的,即使这两个对象不具有可比性(无operator==重载),或者类似的抽象(例如,如果a == b是有效的表达式,则两个对象a和b是相等
..
我想定义一个可以检测T类型是否可以结构化绑定的concept: template concept two_elements_structured_bindable = requires (T t) { auto [x, y] = t; }; 但这不能编译。这样的concept有什么合适的定义吗? 推荐答案 否 结构化绑定有三种情况:
..
我正在尝试创建一个概念ElementIterable,它可以确定类型是否为嵌套区域。例如,std::vector中的元素是不可迭代的,但std::vector>中的元素(std::vector)是可迭代的。关于使用std::iterator_traits的想法出现在我的脑海中,实验代码如下所示。然而,这个ElementIterable概念
..
此代码有效吗? template struct s { void f() const { } static void f() requires b { } }; void g() { s().f(); } 啪的一声说是,GCC说不是 : In function 'void g()':
..
C++20引入了一个比较概念boolean-testable,但我注意到它的斜体和中间的连字符,表示它只用于展示,由于中没有所谓的std::boolean_testable,我们不能在我们自己的代码中使用它。 此仅展示概念的用途是什么?为什么这个概念如此神秘? 推荐答案 其目的与所有仅用于说明的概念一样,是为了简化标准中的规范。它只是一个构建块,用于指定其他(
..
适用于类的语法不适用于概念: template concept C = requires(Type t) { // ... }; template concept C = requires(Type t) { // ... }; MSVC表示适用于error C7606: 'C': concept ca
..
我研究了clang-Format样式选项https://clang.llvm.org/docs/ClangFormatStyleOptions.html,但没有看到任何与c++概念和REQUIRED子句的引用。通常我可以配置clang-Format来做我想做的事情,但我想不出如何让它很好地处理我的概念和要求子句: 当前clang-Format对我的概念做了这样的处理: template
..