[英]C++: Can I change a vector type?
假设我有以下代码:
typedef struct foo{
int x;
}foo;
typedef struct bar{
int y
}bar;
struct foobar{
std::vector<foo> foo1;
std::vector<bar> bar1;
};
有没有办法改变std::vector<bar> bar1;
进入std::vector<foo> bar1;
并擦除里面的任何数据?
如果是这样,这可以在 function 中完成吗? 是这样的吗?
replaceBar(&myOwnStruct);
我不太擅长矢量,所以解释为什么这是/不可能的会很好。 谢谢!
将变量的类型(这在 C++ 中是不可能的)从一种类型“更改”为另一种类型的方法是使用std::variant
来指示它允许持有的可能类型(或者,使用std::any
持有所有类型),例如:
std::variant<std::vector<bar>, std::vector<foo>> bar1;
然后,您可以让bar1
持有std::vector<bar>
,然后在稍后重新分配它持有std::vector<foo>
。
struct foo{
int x;
};
struct bar{
int y;
};
struct foobar{
std::vector<foo> foo1;
std::variant<std::vector<bar>, std::vector<foo>> bar1;
};
void replaceBar(foobar *fb) {
fb->bar1 = std::vector<foo>{};
}
foobar myOwnStruct;
foobar.bar1 = std::vector<bar>{};
replaceBar(&myOwnStruct);
可能性 1:如果 foo 和 bar 可以有一个公共基数 class。那么您可以让向量成为指向基数 class 的指针。然后您可以将指针重新指向不同的 object。但它会重新分配 memory。不完全是什么你自找的。
可能性 2:您可以宣布工会。 但请注意,向量的 memory 在堆上,因此它并没有真正实现您的目标,您必须小心析构函数。 如果它是固定大小的普通 object arrays,你可以做到。
可能性 3:这在游戏中可能对您有用。 不是直接存储一个向量,而是存储一个 flatbuffers 序列化的字节块。 您可以将不同的东西重写到这些字节中。 您将需要结构中的另一个变量来说明这些字节中的内容。 也许这个选项对你来说太遥远了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.