gpt4 book ai didi

c++ - 在 C++11 中将静态 constexpr 数组转换为模板参数

转载 作者:行者123 更新时间:2023-11-30 02:15:57 24 4
gpt4 key购买 nike

假设我们有一个 constexpr 数组,如下所示:

static constexpr unsigned int a[] = {2, 8, ... ,6}; // N element

我想用这个数组作为模板参数包:

typedef SomeTemplatedStruct<a[0], a[1], ... ,a[N - 1]> tmp;

here 所述,可以在 C++14 中这样做。但是,我未能将该代码转换为 C++11。感谢您的帮助。

最佳答案

如果您已经打算自己滚动,则无需实现整数序列助手,因为我们可以使用已经展开的包的大小作为下一个元素的索引,以便在递归期间从数组中取出:

template <typename A, A& a, typename U = typename std::remove_reference<decltype(a[0])>::type, bool = true, U... unpack>
struct unravel;

template <typename T, int N, T (&a)[N], typename U, U... unpack>
struct unravel<T[N], a, U, false, unpack...>
{
template <template <U...> class Thingie>
using into = Thingie<unpack...>;
};

template <typename T, int N, T (&a)[N], typename U, U... unpack>
struct unravel<T[N], a, U, true, unpack...> : unravel<T[N], a, U, (sizeof...(unpack) + 1 < N), unpack..., a[sizeof...(unpack)]> {};

用法:

struct Blub
{
static constexpr unsigned int a[] = {2, 8, 5, 7, 6};
};

template <unsigned int...>
struct TheThingToMake {};

void test()
{
typename unravel<decltype(Blub::a), Blub::a>::into<TheThingToMake> blub;
}

live example

注意:这不适用于大小为 0 的数组,但它们是非标准的,而且我猜,这无论如何都不是一个真正有趣的用例......

关于c++ - 在 C++11 中将静态 constexpr 数组转换为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603440/

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