问题标签 [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 回答
139 浏览

c++ - 他们如何避免没有显式模型(又名概念图)的基于概念的重载问题

正如 Andrew Sutton 在许多会谈和论文中指出的那样,Concepts Lite 提案确实具有基于概念的重载功能,同时没有概念图的概念,即模板参数完全由编译器。鉴于此,尚不清楚他们将如何解决 Siek 和 Gregor 在 2005 年的论文中描述的问题,“<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005 /n1798.html" rel="nofollow">明确的模型定义是必要的”。简而言之,可以用论文中的以下引文来说明问题。

因此,某些输入迭代器类型(例如 istream_iterator)会被错误分类为前向迭代器。这有什么危险?一些基于 Input_iterator 与 Forward_iterator 的算法调度。

(不过,除了迭代器之外还有更多示例。)

是的,我知道上面提到的那篇论文考虑了 C++0x 概念,但问题似乎是概念提案的“通用”。

0 投票
2 回答
4381 浏览

c++ - c++ 概念与 Haskell 类型类有何不同?

来自 Concepts TS 的 C++ 概念最近已合并到 GCC 主干中。概念允许人们通过要求类型满足概念的条件(例如“可比较”)来约束通用代码。

Haskell 有类型类。我对 Haskell 不是很熟悉。概念和类型类是如何相关的?

0 投票
2 回答
122 浏览

c++ - 定义概念时是否允许使用 OR (`||`)?

我看到许多用 定义的“复合”概念的例子&&,但没有在哪里||使用。这让我想知道使用||. 在我看来,使用||将允许指定一个具有类似于重载(即临时多态性)效果的概念,但具有一组封闭的可能性。

对于一组“原始”概念 C1,...,CN,写成

作为“复合”概念?

0 投票
2 回答
616 浏览

c++ - Concepts TS 中是否有任何预定义的概念?

'Concepts lite' 已经被接受为 TS 并且(示例实现)合并到 GCC 主分支中,所以后续问题是任何概念都会预定义(如SortableRandom_access_range)吗?

我在哪里可以找到这些预定义的概念?

cppreference.com 上的列表是否准确而详尽?

我可以将它们与最新的 GCC 主干构建一起使用吗?



编辑 1:由于 C++17 不接受概念,将 C++17 更改为 TS。

0 投票
1 回答
116 浏览

c++ - Can I write a catch clause similar to abbreviated function templates?

At the top of my program, I have an exception handler.
It looks something like this:

As I obtain more an more exception types,
I'd like to take a more generic approach.
How can I apply generic programming to the Handle_All_Exceptions function?


Would something like this be possible in newer versions of C++?

0 投票
3 回答
629 浏览

c++ - 当模板类 is_convertible 为众所周知的类型时特化函子

所以我想在模板类型时应用特定的boost::is_convertible代码WellKnownType

为此,我考虑使用仿函数:

然后,我想在以下情况下专门使用这个函子来做其他事情boost::is_convertible<T, WellKnownType>

然后,我想我可以轻松地更改Foo定义以使用函子并在可转换为时执行某些操作,而在不可T转换WellKnownType时则不执行任何操作:

我不知道如何实现这种行为。我知道BOOST_CONCEPT_REQUIRES,但不知道如何将其应用于模板专业化。有什么帮助吗?

0 投票
2 回答
242 浏览

c++ - 概念可以替换模板关键字的所有其他实例吗?

C++ 概念能否用于替换关键字的所有外观template
(除了概念自己的声明)?

我很好奇是否有任何理由仍然需要将关键字template用于其他语言结构,例如模板化类或模板化函数。我能想到的唯一例外是模板化类型别名。使用模板进行编译时间计算将可以通过constexpr函数替换。

为了让我的问题保持简短,
常规模板声明可以做什么,采用概念 + constexpr 无法替代?

0 投票
1 回答
157 浏览

c++ - 在 requires 参数列表中,您可以引入导致替换失败的类型吗?

例如,我可以定义一个类似的概念吗

使用 gcc 6,此代码将编译,但类似的结果Iterator<int>也会导致替换失败。这是它应该做的吗?truevalref

0 投票
1 回答
420 浏览

c++ - gcc 中的 Concepts-Lite(带有到 TS 的链接)

正如最近这个问题的回答所强调的那样,gcc现在支持concepts-lite从其 svn 主干构建。

同一个问题链接到最新的TS,N4377编辑- 答案有一个更新的 TS。

可以找到标记为N3580的有用论文- 这是 2013 年的论文,作者是 Andrew Sutton、Bjarne Stroustrup 和 Gabriel Dos Reis。

可以找到标记为N4434的 N4377 调整列表。这给出了对 N4377 论文的 3 处建议更改,并将其列为回复点 Walter E. Brown。

这些论文/技术规范是相似的,但在每种情况下都有各种小的变化。

是否有一些简单的方法来发现gcc当前实现的内容?或者实际上,计划实施?

作为一个附带问题:是否ConceptClang或某些类似名称的项目与 c++1z 概念相关?2015 年 5 月的邮件列表帖子收集了一些想法,特别是:

除了她的 C++0x 工作之外,Larisse 可能还为 ts 概念做了一些工作。

没有对该线程作出进一步的答复。

0 投票
1 回答
353 浏览

c++ - 在概念中使用带有 CRTP 的模板模板参数

我想写一个concept测试从基类继承的东西。

我的类使用 CRTPBase由类公开继承。Derived

此代码工作正常:

如果我想模板化,我遇到了问题Derived。这可能吗?

明显的问题是T我的concept声明中没有。此外,我很确定我不能声明

因为 aconcept需要一个模板参数。

编辑-工作文件 P0121R0第 8.3.5 节第23 页中列出,template<typename T, typename U> concept bool C3 = true;. 因此,无论我在哪里阅读 a conceptcan take only 一个参数,要么是过时的、错误的,要么是我阅读时不小心。结束编辑

我可以在这里访问T我需要的其他类型吗?有没有另一种方法(在我看来,模板类型D会携带它的类型的信息T,但我也不能使用using T = typename D<T>::valueType;,因为我需要T具体的类型D<T>......)