gpt4 book ai didi

c++ - 在 C++20 中具有向后兼容概念的推荐方法

转载 作者:行者123 更新时间:2023-12-04 07:23:51 26 4
gpt4 key购买 nike

我对概念相当陌生,但到目前为止我很喜欢它们,并想在项目中使用它们。问题是我还希望项目能够使用早期的 C++ 标准进行编译。到目前为止,我提出了以下实用化的解决方案:

#if ISCPP20
template<NumT number = double,Index index = int,CoordinateContainer<number> coords>
#else
template<class number = double,class index = int,class coords>
#endif
其中 NumT、Index 和 CoodinateContainer 是定义的概念。该解决方案有效,但我不喜欢冗长。是否有推荐的方法将概念引入代码库,同时不破坏向后编译兼容性?

最佳答案

实际上,如果您希望能够通过宏检查轻松地从代码中删除概念,则不应使用任何紧凑的概念语法。这意味着您应该始终使用明确的 requires 子句。这使得语法更容易 #if大约。
如果您有重载的概念,其中存在多个具有更多限制性概念的定义,那么这不是一件容易删除的事情。它是您接口(interface)的一部分,您可以传递具有不同接口(interface)的类型,编译器通过复杂的重载方案选择要实例化的模板。
所以你必须使用某种形式的 SFINAE 来做同样的事情。但究竟你必须做什么取决于你是如何做的。在某些情况下,它可能很容易,例如使用简单的模板函数,您可以将其转换为 if constexpr单个定义中的 block 。
但其他情况要困难得多。你可以把requires关于模板类的非模板成员的子句。用 SFINAE 做同样的事情要困难得多。
因此,如何获得相同的效果将取决于您要达到的效果。

关于c++ - 在 C++20 中具有向后兼容概念的推荐方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68329626/

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