问题标签 [c++-concepts]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
191 浏览

c++ - 将 BitmaskType 与零进行比较的正确方法?

根据这个BitmaskType概念,实现必须确保以下语句的格式正确:(列在 §17.5.2.1.3.4 中)

如果表达式 X & Y 不为零,则在对象 X 中设置值 Y。

其中 X 和 Y 属于概念类型BitmaskType

使用 gcc 4.7 尝试以下简单代码片段时,出现模板推导错误:

错误:

这是 gcc 中的错误还是我只是在这里出错了?如果是,执行这种检查的正确方法是什么?

我已经检查了 gcc buglist 但找不到任何涵盖该主题的内容。

0 投票
1 回答
296 浏览

c++ - 巴顿-纳克曼 vs std::enable_if

什么是可取的(如果有的话)?

变体 A(Barton-Nackman):

变体 B (std::enable_if):

0 投票
3 回答
375 浏览

c++ - 平等的定义

在 C++ 中重载“==”运算符时,是否有关于明确表示相等性的标准定义,或者有一组关于“==”应该如何表现的准则?

我目前有一个类不会将其整个自身存储在内存中。它基本上使用优先级队列来确定其内部对象被使用的频率,以及何时从队列末尾弹出对象,它们会从内存中删除并写入磁盘。

所以现在问题出现在相等上,这两个对象相等意味着什么。因为我们可以从在各个方面都相同的对象 A 和 B 开始,所以它们将相同的数据加载到内存中,并且它们在磁盘上具有相同的数据。但是在 A 和 B 上调用了一系列函数之后,它们现在可能会有所不同。A 和 B 在磁盘上仍然有相同的数据,但它们将不同的数据加载到内存中。所以问题是应该A == B解析为真还是假?

是否有一套规则或指南来定义这应该如何工作?或者这只是我决定什么对程序最有意义并记录“==”做什么的情况?

0 投票
0 回答
457 浏览

c++ - 如何在 C++11 中实现概念

我在哪里可以看到严格使用 C++11 语言和库功能实现的概念?我更喜欢一个简单的库来立即开始使用它。

0 投票
2 回答
400 浏览

c++ - 成员函数检查:使用 C++11 特性实现编译时检查

我已经读过 C++11 有足够的静态检查(编译时间),以便实现 C++11(已删除)的概念检查的很大一部分。(我在最近关于删除概念的问题的评论中读到了这一点...... - 这个问题很快就被关闭了,因为没有建设性)。

下面的 C++03 代码仅检查类中是否存在成员函数(我的模板类希望在该类上工作)。以下是搜索的 4 个成员函数,我总是使用相同的模式:

  • 一个 typedef 来定义函数原型的 typedef
  • 如果类型名 TExtension 没有定义这样的成员函数,或者它有不同的原型,则调用 static_cast 会中断编译

这是代码:

这是我代码的某些部分,但它完全基于C++03。我很乐意用那些新的 C++11 特性重写它……这里应该用什么来代替?

0 投票
1 回答
302 浏览

scala - 使用 Scala 特征对 C++ 概念进行建模

在论文«Type Classes as Objects and Implicits»中有一些使用 Scala 特征的示例,例如 C++ 概念和 Haskell 类型类。我尝试在 Scala中编写类似InputIterator概念和函数的东西:find

我不确定我是否正确理解了特征。但仍然......有一个InputIterator用 Scala 编写的特征(或更准确地说 - 它是find函数中使用的方法的简化模拟):

EqualityComparable清楚了:

但是我们应该怎么做find呢?我想写这样的东西:

但它会导致错误«非法依赖方法类型»。而且我不知道如何以value_type其他方式“提取”抽象类型。因此,我得到了以下代码:

VT我们在 中使用类型参数而不是抽象类型def find[Iter, VT, V]

所以问题是:如何才能做得更好?是否可以在value_type没有附加类型参数的情况下使用抽象类型VT

0 投票
3 回答
17090 浏览

c++ - 概念和模板约束有什么区别?

我想知道 C++ 完整概念提案和模板约束之间的语义差异是什么(例如,出现在 Dlang 中的约束或C++1y 的新概念精简提案)。

什么是成熟的概念能够比模板约束不能做的?

0 投票
2 回答
447 浏览

c++ - 如何为不可创建的类创建包装器?

我正在使用特定的类库。所有可用的值类都派生自基类。有标量类型

前 3 个类将方法 get() 定义为返回值。第 4 类将 get 定义为引用。

我需要在我的模板包装类中统一使用所有 4 个类。我已经编写了如下的辅助 oaStringValueGetter 类。但是有问题。基类 oaValue 限制默认构造函数和复制构造函数。只有一种方法可以使用静态“create()”方法创建实例。

有没有办法向我的类添加一些类型转换方法,以便它自动从 oaStringValue 转换?

这是从库中获取的部分类定义,供参考

0 投票
1 回答
271 浏览

c++ - 为什么Boost.Concept通过空指针调用析构函数?

通过 Clang 静态分析器分析一些 Boost 依赖的代码时,我得到了以下错误:

逻辑错误 Called C++ object pointer is null usage.hpp 22

从下面的代码boost/concept/usage.hpp

问题:这是 Boost 中的真正错误还是 Boost.Concept 通过空指针调用析构函数以在概念检查期间以某种方式生成编译器错误?

0 投票
1 回答
425 浏览

c++ - 模板约束是否可用于变量模板?

在最新的模板约束论文中,提出了一个约束模板参数的新工具集。此外,在 C++14 中提供了变量模板。变量模板允许定义类型参数化常量等。

没有提及这些功能如何交互。使用 pi 的规范示例,我们可以得到:

这将强制 C/C++ 数字转换从整数到双精度。它还可以防止使用完全不相关的类型进行实例化。(看看这个,我们可能想用需要浮点 ctor 的东西来替换 Floating_point 以支持复数。)

我是否遗漏了其中一篇论文中的某些内容,还是正在研究中?也许它是免费的,不值得一提?