【发布时间】:2019-10-28 18:20:00
【问题描述】:
我有一个模板类,想用参数中指定的从1 到N 的数字初始化它的std::array。如何做到这一点?
#include <iostream>
#include <array>
template<unsigned int N>
class Jollo
{
private:
std::array<int,N> deck;
public:
Jollo()
{
static_assert(N>1,"Jollo: deck size must be higher than '1'");
deck = std::array<int,N>{1...N}; //how to do this? = {1,2,4,5,6,7,8,9,10,11,12,13,14,15}
}
};
int main()
{
Jollo<15> j;
return 0;
}
【问题讨论】:
-
编译时实例化(比你要求的多一点):stackoverflow.com/questions/37297359/…
-
您可以使用
std::iota,例如stackoverflow.com/questions/17694579/…(类似的问题,但带有向量)。 -
离题,但您的
static_assert可能应该在类级别,而不是在构造函数中。 -
它可以工作,但如果
static_assert引用类模板参数,则将它们放在类级别更为惯用。如果构造函数是模板化的,这可能不起作用,例如,godbolt.org/z/DLP_Ew -
也是 SFINAE
template<size_t N, std::enable_if_t< (N > 1), int > = 0>。虽然报错信息不是很清楚。