可互换使用的类型和非类型模板参数

时间:2017-11-15 22:25:16

标签: c++ templates

在C ++中是否可以声明某个类,以便允许它传递整数值或作为模板参数输入?

这样的事情:

#include <iostream>
using namespace std;

template <auto I>
struct Foo {};

int main()
{
    Foo<int> foo1;
    Foo<1> foo2;
    return 0;
}

1 个答案:

答案 0 :(得分:6)

不,这是不可能的。作为一种变通方法,您可以使用std::integral_constant来将值均匀地作为类型传递。

template <typename I>
struct Foo {};

int main()
{
    Foo<int> foo1;
    Foo<std::integral_constant<int, 1>> foo2;
}

使用C ++ 17,您可以定义

template <auto I>
using constant = std::integral_constant<decltype(I), I>;

避免一些样板。