gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:58:33 26 4
gpt4 key购买 nike

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

void foo(ConceptA& arg);
void foo(ConceptB& arg);
A a;
fun(concept_cast<ConceptA>(a));

注意:此示例使用 N3701 中提出的“简洁表示法”语法。 , §5

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

例如:让我们说ConceptA 说 T 必须有一个成员函数 bar()ConceptB 说 T 必须有一个成员函数 baz()class A同时拥有bar()baz()成员函数

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

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

最佳答案

如果其中一个概念是另一个更受约束的版本,(例如,满足 ConceptA 的所有内容也将满足 ConceptB 但反之不行),那么最-A 满足的约束重载将被选择。

如果两个概念都没有比另一个更受约束,那么这两个被认为是模棱两可的重载。鉴于您是如何表达问题的,我希望您已经知道这一点。

关于concept_cast,我认为目前的提案中没有类似的内容。至少在布里斯托尔 session 上(2013 年 4 月)没有。我预计这不会改变,因为当前的重点似乎是确保概念精简/约束提案的核心是可行的并且委员会可以接受。

可能会有一些明确选择像这样的重载模板函数的需求,也许这样的转换是正确的,但我不太确定。考虑到这样的转换对重载消歧有用,其中 static_cast 是一个更通用的功能。 concept_cast 的结果将与重载决议上下文之外的原始值相同!

编辑:查看最新提案 (N3701),没有明确指定要实例化哪个模板函数的规定。

关于c++ - 概念转换的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18666664/

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