gpt4 book ai didi

c++ - 这个占位符生成器如何工作?

转载 作者:行者123 更新时间:2023-11-28 05:38:27 25 4
gpt4 key购买 nike

我找到了这个 placeholder generator允许您基于泛型类型模板生成整数序列的代码。

template<int...> struct int_sequence {};

template<int N, int... Is> struct make_int_sequence
: make_int_sequence<N-1, N-1, Is...> {};
template<int... Is> struct make_int_sequence<0, Is...>
: int_sequence<Is...> {};

template<int> // begin with 0 here!
struct placeholder_template
{};

#include <functional>
#include <type_traits>

namespace std
{
template<int N>
struct is_placeholder< placeholder_template<N> >
: integral_constant<int, N+1> // the one is important
{};
}

我知道它的应用,但它究竟是如何工作的?

最佳答案

如果没有原始代码的链接,就会丢失很多内容。我猜你问的是你在此处复制的片段。

此片段有两个部分,两者在没有更大上下文的情况下是不相关的。第一个是 int_sequencemake_int_sequence .

一、用途:make_int_sequence<3>继承自 int_sequence<0, 1, 2> . int_sequence只是一组索引的类型容器,make_int_sequence<N>是生成 int_sequence 的生成器类型从 0 到 N-1 的索引。

如果您遵循代码,make_int_sequence<3>继承自 make_int_sequence<2, 2> , 它继承自 make_sequence<1, 1, 2> , 它继承自 make_sequence<0, 0, 1, 2> , 它继承自 int_sequence<0, 1, 2> .

(在 C++14 中,存在 std::integer_sequence 和 friend 来做这个。)

第二部分是placeholder_template .自 std::placeholders::_1 , _2等是不确定的类型,我们可以自己制作的方法是创建一个类型,然后特化 std::is_placeholder对于那种类型。在这种情况下,类型是 placeholder_template .关于// the one is important的评论指的是 placeholder_template<0>就像_1 , 两者都必须继承自 std::integral_constant<int, 1> .

链接中的实际代码然后使用 make_integer_sequence构建一组从 0 开始的索引,然后为每个索引生成一个占位符。

关于c++ - 这个占位符生成器如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37701027/

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