只需将参数列表展开为初始化列表。
my_vector_ {args...};
但是,您确定要这样做吗?除非您要在运行时添加/删除项目,否则您不需要动态存储并且同样可以使用std::array。
但是请注意,您不能在 class 定义中初始化非文字类型的 static 数据成员。如果你只有一个编译单元(因为template 是在源文件中定义的),你可以这样做。
#include <array>
#include <iostream>
template <int... Args>
struct example
{
// inline declaration
static const std::array<int, sizeof...(Args)> numbers;
};
// outline definition and initialization
template <int... Args>
const std::array<int, sizeof...(Args)> example<Args...>::numbers = {{Args...}};
int
main()
{
std::cout << example<14, 92>::numbers[0] << std::endl;
}
如果要使template 可用于多个翻译单元(并因此在头文件中提供),这将变得很麻烦。在这种情况下,我建议您改用函数。
另一种选择是使用函数。这对于非templateclasses 更有用,因为如上所示将定义放入头文件会导致违反一个定义规则 (ODR)。
#include <array>
#include <iostream>
template <int... Args>
struct example
{
static const std::array<int, sizeof...(Args)>&
numbers() noexcept
{
static const std::array<int, sizeof...(Args)> thenumbers = {{Args...}};
return thenumbers;
}
};
int
main()
{
std::cout << example<14, 92>::numbers()[0] << std::endl;
}
实际上,我还是建议您这样做,因为即使 ODR 违规不是问题,我也发现它更简单。