我试图实现一个通用类模板,将其模板参数转发给另一个类,如下所示:
template <typename... Args>
class A : public B<Args...>
{
...
问题在于B可以像这样使用标量常量模板:
template <size_t N>
class B
{
...
甚至是这样:
template <typename T, size_t N>
class B
{
...
那么,有没有办法接受混合类型名和标量常量作为可变参数模板参数?
答案 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;