问题标签 [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.
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 概念,但问题似乎是概念提案的“通用”。
c++ - c++ 概念与 Haskell 类型类有何不同?
来自 Concepts TS 的 C++ 概念最近已合并到 GCC 主干中。概念允许人们通过要求类型满足概念的条件(例如“可比较”)来约束通用代码。
Haskell 有类型类。我对 Haskell 不是很熟悉。概念和类型类是如何相关的?
c++ - 定义概念时是否允许使用 OR (`||`)?
我看到许多用 定义的“复合”概念的例子&&
,但没有在哪里||
使用。这让我想知道使用||
. 在我看来,使用||
将允许指定一个具有类似于重载(即临时多态性)效果的概念,但具有一组封闭的可能性。
对于一组“原始”概念 C1,...,CN,写成
作为“复合”概念?
c++ - Concepts TS 中是否有任何预定义的概念?
'Concepts lite' 已经被接受为 TS 并且(示例实现)合并到 GCC 主分支中,所以后续问题是任何概念都会预定义(如Sortable
或Random_access_range
)吗?
我在哪里可以找到这些预定义的概念?
cppreference.com 上的列表是否准确而详尽?
我可以将它们与最新的 GCC 主干构建一起使用吗?
编辑 1:由于 C++17 不接受概念,将 C++17 更改为 TS。
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++?
c++ - 当模板类 is_convertible 为众所周知的类型时特化函子
所以我想在模板类型时应用特定的boost::is_convertible
代码WellKnownType
:
为此,我考虑使用仿函数:
然后,我想在以下情况下专门使用这个函子来做其他事情boost::is_convertible<T, WellKnownType>
:
然后,我想我可以轻松地更改Foo
定义以使用函子并在可转换为时执行某些操作,而在不可T
转换WellKnownType
时则不执行任何操作:
我不知道如何实现这种行为。我知道BOOST_CONCEPT_REQUIRES
,但不知道如何将其应用于模板专业化。有什么帮助吗?
c++ - 概念可以替换模板关键字的所有其他实例吗?
C++ 概念能否用于替换关键字的所有外观template
(除了概念自己的声明)?
我很好奇是否有任何理由仍然需要将关键字template
用于其他语言结构,例如模板化类或模板化函数。我能想到的唯一例外是模板化类型别名。使用模板进行编译时间计算将可以通过constexpr
函数替换。
为了让我的问题保持简短,
常规模板声明可以做什么,采用概念 + constexpr 无法替代?
c++ - 在 requires 参数列表中,您可以引入导致替换失败的类型吗?
例如,我可以定义一个类似的概念吗
使用 gcc 6,此代码将编译,但类似的结果Iterator<int>
也会导致替换失败。这是它应该做的吗?true
val
ref
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 概念做了一些工作。
没有对该线程作出进一步的答复。
c++ - 在概念中使用带有 CRTP 的模板模板参数
我想写一个concept
测试从基类继承的东西。
我的类使用 CRTPBase
由类公开继承。Derived
此代码工作正常:
如果我想模板化,我遇到了问题Derived
。这可能吗?
明显的问题是T
我的concept
声明中没有。此外,我很确定我不能声明
因为 a concept
需要一个模板参数。
编辑-工作文件 P0121R0在第 8.3.5 节第23 页中列出,template<typename T, typename U> concept bool C3 = true;
. 因此,无论我在哪里阅读 a concept
can take only 一个参数,要么是过时的、错误的,要么是我阅读时不小心。结束编辑
我可以在这里访问T
我需要的其他类型吗?有没有另一种方法(在我看来,模板类型D
会携带它的类型的信息T
,但我也不能使用using T = typename D<T>::valueType;
,因为我需要T
具体的类型D<T>
......)