在C ++中是否可以声明某个类,以便允许它传递整数值或作为模板参数输入?
这样的事情:
#include <iostream>
using namespace std;
template <auto I>
struct Foo {};
int main()
{
Foo<int> foo1;
Foo<1> foo2;
return 0;
}
答案 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>;
避免一些样板。