gpt4 book ai didi

c++ - auto之前的概念连词?

转载 作者:行者123 更新时间:2023-12-05 09:29:48 25 4
gpt4 key购买 nike

我正在学习 C++20 概念。有没有办法在 auto 之前就地结合概念? ?例如,如果我有一个 MutableGraph<G>概念和一个VertexListGraph<G>概念,我可以定义

template <typename G>
concept MutableVertexListGraph = MutableGraph<G> && VertexListGraph<G>;

MutableVertexListGraph auto g = ...;

但是当我只是想让它模拟这两个概念时,给这个概念命名是很烦人的。如果我能做就好了

MutableGraph && VertexListGraph auto g = ...; // && not allowed here.

甚至类似

template <typename T, concept... Concepts> // <- "concept" not allowed here.
concept ModelsAll = (Concepts<T> && ...);
...
ModelsAll<MutableGraph, VertexListGraph> auto g = ...;

我当然可以

MutableGraph auto g = ...;
requires { MutableGraph<decltype(g)>; };

缺乏对称性,或者

auto g = ...;
requires { MutableGraph<decltype(g)>; MutableGraph<decltype(g)>; };

声明行缺少概念。

最佳答案

不,在将约束应用于推导变量定义的类型时,无法组合概念。

ConceptName auto variable = ...; 相当可读。 ConceptName 可能是不言自明的,它为变量定义留出了足够的空间。

Concept1 && Concept2 && Concept3 auto variable = ...; 可读性差很多。在这一点上,概念序列挤出了语句中真正重要的部分:变量声明。因此,将其拆分为多个语句更有意义:

auto variable = ...;
static_assert(Concept1<decltype(variable)> && Concept2<decltype(variable)> && Concept3<decltype(variable)>);

这涉及非常不幸的 decltype 用法(额外的 using 语句可以避免),但它确实分离了关注点,使 variable 声明本身更具可读性。

关于c++ - auto之前的概念连词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70382263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com