问题标签 [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 投票
2 回答
418 浏览

c++ - 概念转换的等价物是什么?

考虑 aclass A满足两个概念ConceptAConceptB。让一个函数foo为两个概念重载:

注意:此示例使用作为N3701的一部分提出的“简洁表示法”语法,§5

是否存在concept_cast允许用户选择重载的东西?

例如:假设 ConceptA说 T 必须有一个成员函数bar() ConceptB说 T 必须有一个成员函数baz() 并且class A同时具有bar()baz()成员函数

它显然是模棱两可的,但是有没有办法像我们static_cast对正常重载一样明确选择?

更新:接受的答案超过 2 年。c++17有什么更新吗?

0 投票
2 回答
2316 浏览

c++ - Concepts-Lite 将如何与可变参数模板交互?

我在Going Native 2013中观看了 Bjarne Strustrup 的演讲,他为即将推出的 C++ 概念精简版功能提供了以下示例。

我的问题是这将如何与可变参数模板一起使用?

假设我想maximum使用一个Comparable概念定义一个可变参数函数。会接受以下语法吗?

如果是这样,则Comparable...意味着参数包中的所有元素都是相同的类型,或者只是它们都是Comparable类型,因此包可能同时包含intstring?(两者都可以比较,但不能相互比较)

好奇的人想知道。

0 投票
2 回答
1038 浏览

c++ - std::vector 的概念和 GCC 实现

让我们尝试创建一个与RandomAccessIteratorNullablePointer概念相匹配的类指针类型。这里的目标是创建一个自定义分配器 ,以便将 std::vector 与我们的指针类型一起使用。你可以在这里找到片段

尝试编译此代码时会出现问题:

我们收到以下错误消息:

在这里我们看到我们的类型必须是 bool 可转换的。这并不难做到,如果人们有我们的指针类型的实例,他们很可能会像这样使用它。因此,让我们这样做并取消对我们的代码片段的以下注释:

我们用 clang 得到以下错误:

Clang 的错误向我们展示了我们在这里遇到麻烦的确切原因。现在我发现的唯一可行的解​​决方案如下:

  • 请求 c++11 时替换0为 c++11 关键字nullptr
  • 替换0为指针类型static_cast<pointer>(0)
  • 更新分配器概念中指针的概念要求。
  • 不使用构造函数std::initializer_list(悲伤)

在 C++ 中定义自定义指针是错误的吗?

这是一个错误吗?

0 投票
3 回答
1036 浏览

c++ - 精简版概念会改变 CRTP 实现静态多态性的需求吗?

自从我CRTP几年前发现以来,我在很多地方都使用它来实现非常密集的面向计算的代码的编译时多态性。当人们关心通用性和运行时的最大性能时,以通用的方式将成员函数“注入”到类中是很棒的。

我已经阅读/观看了几件事,concepts lite这将是(我希望)下一个C++标准的一部分。以更抽象和通用的方式设计功能绝对是美妙的,避免了SFINAE/std::enable_if我目前使用的那些糟糕的线条。

我还没有测试g++实现概念的分支来玩它们并以新的方式研究我喜欢的元编程方法。但也许你们中的一些人有。我的第一个想法是概念并不能解决静态多态的问题,但由于这类事情可能严重依赖技巧,我可能错了。所以我的问题如下:精简版概念是否能够以CRTP更方便的方式实现编译时多态性(正如我们目前可以通过的那样)?(欢迎提供代码示例)。

0 投票
1 回答
78 浏览

c++ - 类是否为概念建模?(概念到特征,反之亦然)

显然我遗漏了一些明显的东西,很可能是 SFINAE - 但对于我的生活,我就是找不到“它”是什么。可以责怪我的智齿,但这听起来很奇怪,因为它是关于智慧的……

在 C++ 中,当使用概念(Boost、Lite 或其他)时,人们会使用类似的东西REQUIRES(list_of_concepts)来强制执行这一点,例如:函数调用中的类型遵循“ BidirectionalIteratorAccess”之类的概念。但是这个特性对应的“查询”组件是什么?本质上,我如何询问一个类类型 T 模型BidirectionalIteratorAccess

我所知道的是我不是在寻找REQUIRES或者BOOST_CONCEPT_ASSERT因为它们是真或编译错误;我正在寻找对或错的东西,例如type_traits. Boost.Concept Assert 和其他人的文档建议使用 SFINAE 检查类似的东西,not_satisfied<Concept>但如果是这样,我出于某种原因无法弄清楚哪个部分在哪里。我只能猜测 SFINAE 测试最终会是这样的:

......到底什么样的白痴将它们命名为智齿?为什么我跑题了?

0 投票
5 回答
606 浏览

c++ - 比较不比较完整对象状态的常规类型是否有概念名称?

我有一组看起来像这样的类型:

也就是说,在比较中只考虑对象状态的特定部分:在此示例中,任何 MyFlag 对象都将使用它们的 id 与其他对象进行比较,而不是它们包含的其余数据。

我认为它符合 Sean Parent 给出的“值类型”的定义,但我也认为这是一种奇怪或不熟悉(但在我的情况下很有用)的模式。

所以我的问题是:这个......概念有概念名称吗?


这种类型有什么用?我在“黑板”事件系统中使用这种类型,它基本上是一种具有至少常规类型的任何值的集合。但是,即使已经找到(通过比较),这个黑板也会系统地覆盖推送(插入)其中的值。这样,我使用比较运算符作为标识符覆盖黑板上值的完整状态。

我不知道这是否是众所周知的模式或想法,或者从长远来看是否存在问题。到目前为止,它非常有用。它也感觉像是“太聪明”的东西,但我缺乏这种模式的经验来证实这一点。可能是我滥用比较运算符的使用,但感觉这些类型的语义在我的使用中是正确的。

如有必要,我可以提供一个详细的使用示例。

0 投票
1 回答
3197 浏览

c++ - 什么是 C++ 技术规范?

Concepts-lite C++ (proposal N3701) 特性未包含在 C++1y 标准中,但据说它将作为技术规范发布。它到底是什么意思?它会自动成为下一个 C++ 版本的标准功能吗?

0 投票
3 回答
354 浏览

c++ - 用什么替代 C++ 中的概念(即将推出的功能)?

用什么替代 C++ 中的概念(即将推出的功能)?

您可能听说过 C++ 中的概念。该功能允许您指定对模板中的类型的要求。

我现在正在寻找一种方法来做到这一点,我发现的最好的方法是在 Stroustrup 的书中,他将谓词与 static_assert 一起使用,如下所示:

如果您使用其他方法或者这个方法有问题,请告诉我。

0 投票
1 回答
1098 浏览

c++ - 我在哪里可以找到一些 C++ 中的好例子来研究面向对象的概念?

我正在尝试通过研究 C++ 中的真实示例来学习面向对象的概念。这个例子应该说明继承、封装、重载、多态等所有概念。

0 投票
1 回答
104 浏览

static - 为什么函数参数不能是静态的

谁能告诉我为什么函数参数不能static?这就是函数参数被声明Stack并在函数返回时被释放的原因吗?有没有办法保留参数值?只是困惑。请澄清。

谢谢。