我应该使用什么类型来编译构造函数中的s
参数?我尝试了unsigned char s[32]
和unsigned char *s
,但都给出了编译错误:
数组初始值设定项必须是初始化列表或字符串文字
struct foo
{
size_t a;
size_t b;
unsigned char c[32];
constexpr foo(size_t a_, size_t b_, ??? s) :
a(a_),
b(b_),
c(s)
{
}
}
答案 0 :(得分:4)
您可以使用的最接近的是可变参数模板:
struct foo
{
size_t a;
size_t b;
unsigned char c[32];
template<typename ... UnsignedChar>
constexpr foo(size_t a_, size_t b_, UnsignedChar ... s) :
a(a_),
b(b_),
c{s...} //use curly braces here
{
}
};
然后将其用作:
foo f(10, 20, 1,2,3,4,5, .....,32);
//a, b, -------s-----------
请注意,如果您为第三个参数s
传递的值少于32个,则c
的其余元素将使用0
进行初始化,如果传递的值超过32个值,编译器(我猜)会发出警告(或错误!)。
或使用std::array<unsigned char, 32>
代替unsigned char[32]
。