类型名和标量常量的可变参数模板

时间:2017-12-01 04:40:41

标签: c++ templates variadic-templates

我试图实现一个通用类模板,将其模板参数转发给另一个类,如下所示:

template <typename... Args>
class A : public B<Args...>
{
    ...

问题在于B可以像这样使用标量常量模板:

template <size_t N>
class B
{
    ...

甚至是这样:

template <typename T, size_t N>
class B
{
    ...

那么,有没有办法接受混合类型名和标量常量作为可变参数模板参数?

1 个答案:

答案 0 :(得分:2)

您可以将值嵌入到类型中。如果我正确地回忆起来,这是boost长期使用的一种技术,并且作为std::integral_constant被添加到C ++ 11中的标准库中(表明它的用处)。

使用C ++ 17,事情变得更加简单。

template<auto val>
struct constant : std::integral_constant<decltype(val), val> {};

结合B2的别名B,您可以将其用作

template<typename T, typename N>
struct B2 { using type = B<T, N::value>; };

template<typename... Args>
struct A : public B2<Args...>::type {};

A<int, constant<42>> a;