C++11 可能在C+中创建不同结构的数组+;

C++11 可能在C+中创建不同结构的数组+;,c++11,C++11,我有一些类似这样的结构: struct A { ... }; struct B { ... }; template<typename struct_arg> class X { ... } args [2] { A, B }; for (args) { X<args[i]> x; } 我有一个这样的模板: struct A { ... }; struct B { ... }; template<typename struct_arg> cla

我有一些类似这样的结构:

struct A { ... };
struct B { ... };
template<typename struct_arg>
class X { ... }
args [2] { A, B };

for (args) {
    X<args[i]> x;
}
我有一个这样的模板:

struct A { ... };
struct B { ... };
template<typename struct_arg>
class X { ... }
args [2] { A, B };

for (args) {
    X<args[i]> x;
}
模板
类X{…}
现在我想创建一个参数数组作为struct,如下所示:

struct A { ... };
struct B { ... };
template<typename struct_arg>
class X { ... }
args [2] { A, B };

for (args) {
    X<args[i]> x;
}
args[2]{A,B};
用于(args){
X;
}
我可以创建这样的数组吗

是的,你可以。用于此用途,您可以使用访问变体的此类成员

但如果这样做,请记住,数组的每个元素都有一个额外的数据成员,该成员包含类型信息,并且每个元素的最小大小都与存储的最大类型相同。而且
std::visit
也会带来开销,因为必须创建一个用于访问数据成员的表。通常在编译时完成,但有时g++会在运行时生成,这会大大降低速度

struct A
{
    void Do() { std::cout << "A" << std::endl; }
};  

struct B
{
    void Do() { std::cout << "B" << std::endl; }
};  

int main()
{   
    std::array<std::variant< A,B >,2> arr{ A{}, B{}, B{}, A{} };

    for ( auto& element: arr )
    {   
        std::visit( []( auto& vari ) { vari.Do(); }, element );
    }   
}  
结构A {
void Do(){std::难道你没有调查过吗?我解决了这个问题,非常感谢你的帮助:D