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