gpt4 book ai didi

c++ - 未命名的非类型模板参数有什么意义?

转载 作者:行者123 更新时间:2023-12-03 17:44:13 24 4
gpt4 key购买 nike

根据 the reference ,非类型模板参数的名称是可选的,即使在分配默认值时也是如此(参见(1)和(2))。因此这些模板结构是有效的:

template <int> struct Foo {};
template <unsigned long = 42> struct Bar {};

我还没有看到访问非类型参数值的可能性。
我的问题是:未命名/匿名非类型模板参数有什么意义?为什么名称是可选的?

最佳答案

首先,我们可以将声明与定义分开。
所以声明中的名称并没有真正的帮助。和名称可能用于定义

template <int> struct Foo;
template <unsigned long = 42> struct Bar;

template <int N> struct Foo {/*..*/};
template <unsigned long N> struct Bar {/*..*/};

特化是定义的特例。

然后 name 可以不用,所以我们可以省略它:
template <std::size_t, typename T>
using always_t = T;

template <std::size_t ... Is, typename T>
struct MyArray<std::index_sequence<Is...>, T>
{
MyArray(always_t<Is, const T&>... v) : /*..*/
};

或用于 SFINAE
template <typename T, std::size_t = T::size()>
struct some_sized_type;

关于c++ - 未命名的非类型模板参数有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59824884/

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