簡體   English   中英

C++:我可以更改矢量類型嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM