C++ 传递变量参数时强制转换成员初始值设定项列表

C++ 传递变量参数时强制转换成员初始值设定项列表,c++,templates,variadic-functions,C++,Templates,Variadic Functions,我正在尝试编写一个模板化容器类,它将在内部使用字节数组(出于自定义分配的原因) 大概是这样的: template<typename T, int size> class MyClass{ public: Byte internal_array[size * sizeof( T)]; MyClass() = default; //... }; //... MyClass<int, 20> container; 模板类MyClass{ 公

我正在尝试编写一个模板化容器类,它将在内部使用字节数组(出于自定义分配的原因)

大概是这样的:

template<typename T, int size> class MyClass{

public:
    Byte internal_array[size * sizeof( T)];

    MyClass() = default;

    //...

};

//...

MyClass<int, 20> container;
模板类MyClass{
公众:
字节内部数组[size*sizeof(T)];
MyClass()=默认值;
//...
};
//...
MyClass容器;
如果内部是一个普通数组,我可以添加一个允许使用列表初始化的构造函数

template <typename...Args>
MyClass(Args&&...args) : internal_array{ std::forward<Args>(args)...} {}

//...

MyClass<Byte, 2> container2 = { 1,2};
模板
MyClass(Args&&…Args):内部数组{std::forward(Args)…}{}
//...
MyClass container2={1,2};
但这只适用于字节。编译器接受以下内容,但给出垃圾结果:

MyClass<int, 2> container2 = { 1,2};
MyClass容器2={1,2};

我能否以某种方式强制转换/重新解释构造函数初始化中的内部数组或参数,使其按预期工作?

使用
std::uninitialized\u copy
std::initializer\u list
,您可以执行以下操作:

template<typename T, int size> class MyClass
{
public:
    Byte internal_array[size * sizeof( T)];

    MyClass(std::initializer_list<T> ini)
    {
        std::uninitialized_copy(ini.begin(),
                                ini.end(),
                                reinterpret_cast<T*>(internal_array));
    }


    template <typename ... Ts>
    MyClass(Ts&& ... args) :
        MyClass(std::initializer_list<T>{T(std::forward<Ts>(args)...)})
    {}

    //...

};
模板类MyClass
{
公众:
字节内部数组[size*sizeof(T)];
MyClass(标准::初始值设定项\u列表ini)
{
std::未初始化的_拷贝(ini.begin(),
ini.end(),
重新解释施法(内部数组);
}
样板
MyClass(Ts&…参数):
MyClass(std::initializer_list{T(std::forward(args)…)})
{}
//...
};

在元素上循环,并在字节数组中的正确“位置”放置新的位置?或者看看例如
std::vector
是如何处理它的,因为它通常是以类似的方式实现的(但使用的是动态“数组”而不是固定大小的数组)。如果您的尝试对您无效,请提供。特别是,不要忽略诸如
字节定义之类的细节。这很可能会影响你的结果,而你却没有意识到。可能会有帮助。@Jarod42谢谢!你知道如何在变量参数中使用它吗?它使用从变量参数构造
std::initializer\u list