您可以使用以下内容动态分配array 并在构造期间填充数组的元素。
动态数组
template<typename ...Args>
static int* data( Args&& ...args )
{
constexpr auto size = sizeof...( Args );
int* a1{ new int[ size ]{ std::forward<Args>( args )... } };
return a1;
}
int main( )
{
int* ptr{ data( 1, 2, 3, 4, 5, 6 ) };
delete[ ] ptr;
}
静态数组
template<typename ...Args>
static int* data( Args&& ...args )
{
constexpr auto size = sizeof...( Args );
static int a1[ size ]{ std::forward<Args>( args )... };
return a1;
}
int main( )
{
int* ptr{ data( 1, 2, 3, 4, 5, 6 ) };
}
构造后填充数组
template<typename ...Args>
static int* data( Args&& ...args )
{
constexpr auto size = sizeof...( Args );
// Use can also use a static array here instead.
int* a1{ new int[ size ] };
std::size_t count{ 0 };
for ( auto value : { std::forward<Args>( args )... } )
{
a1[ count++ ] = value;
}
return a1;
}
int main( )
{
int* ptr{ data( 1, 2, 3, 4, 5, 6 ) };
delete[ ] ptr;
}
断言所有值都是 int 类型
template<typename ...Args>
static int* data( Args&& ...args )
{
static_assert( std::conjunction_v<std::is_same<int, Args>...>,
"All args must be of type 'int'" );
constexpr auto size = sizeof...( Args );
int* a1{ new int[ size ]{ std::forward<Args>( args )... } };
return a1;
}
int main( )
{
int* ptr{ data( 1, 2, 3, 4, 5, 6, 7.0 ) };
delete[ ] ptr;
}