gpt4 book ai didi

c++ - 类似于 std::integral_constant 但在 std C++20 库中有自动模板参数?

转载 作者:行者123 更新时间:2023-12-04 01:02:10 27 4
gpt4 key购买 nike

从 C++20 开始可以使用 auto实现整数常量的模板参数:
Try it online!

template <auto Value>
struct integral_constant2
: std::integral_constant<decltype(Value), Value> {};
可以用来代替更详细的变体 std::integral_constant有两个模板参数。
当然更容易写 f(std::integral_constant2<123>{});而不是更详细的 f(std::integral_constant<int, 123>{}); .更重要的是,如果您有复杂的编译时表达式,您可能无法提前知道类型。
我的问题是 C++20 标准库中是否存在类似 integral_constant2 的东西上面说了,不是要重新发明轮子吗?或者至少是一些标准 constexpr功能 std::make_integral_constant(123)推导出 std::integral_constant的模板参数?

最佳答案

不,我不知道这种替换。
鉴于编写自己的提案是多么容易,我相信很难为这样的提案辩护。另一方面,唯一的原因可能是还没有人提出它。

主要是出于好奇,并扩展评论,您可以通过以下方式更进一步:

#include <type_traits>

template <auto Value, template<typename A, A> typename C>
using automized = C< decltype(Value),Value>;

template <auto Value>
using integral_constant = automized<Value,std::integral_constant>;

int main() {
struct S {};
integral_constant<true> c0{};
integral_constant<10> c1{};
integral_constant<S{}> c2{};
}
automized将允许转发 auto任何模板的参数 typename T, T value .然而,它是相当有限的,因为它只适用于完全采用这些参数的模板,而当类型和非类型参数可以混合时,正确处理一般情况是相当痛苦的。

关于c++ - 类似于 std::integral_constant 但在 std C++20 库中有自动模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67918037/

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