隨着編程變得更加複雜,並且需要對結構數據執行操作變得可見。是否有一個結構類型轉化爲其成員的陣列的轉換方法,使得:將結構轉換爲數組
int Bar[2];
或者更好,動態地爲::
vector<int> Bar;
struct FooDesc Foo{
int num_Foo;
int num_Bar;
int GreenFoo;
};
可以由下式表示
目標是將數據結構轉換或重新表示爲可迭代的形式,而不會過度使用賦值運算符。
隨着編程變得更加複雜,並且需要對結構數據執行操作變得可見。是否有一個結構類型轉化爲其成員的陣列的轉換方法,使得:將結構轉換爲數組
int Bar[2];
或者更好,動態地爲::
vector<int> Bar;
struct FooDesc Foo{
int num_Foo;
int num_Bar;
int GreenFoo;
};
可以由下式表示
目標是將數據結構轉換或重新表示爲可迭代的形式,而不會過度使用賦值運算符。
你可以使用無名struct
s至使混合struct
其中的成員都可以被視爲一個數組:但是
struct Foo {
union {
struct {
int x;
int y;
int z;
};
struct {
int array[3];
};
};
};
注意,那無名struct
來自C11和不一個標準的C++功能。它作爲一個擴展支持,雖然由海灣合作委員會以及鐺。
聯合創建一個指向兩個表示的單個數據位置的指針?這非常有用! – 2014-09-18 20:45:14
實施工作沒有任何問題。 (VS2013)這個解決方案打開了一個'vector
如何:
vector <Foo> Bar;
可以再加入你的結構的實例,然後訪問每個元素需要,可以使用類似陣列的格式。
更多信息請參見此相關的問題:
Vector of structs initialization
,在重讀你的問題了幾次,我想我錯理解您的意圖,並回答了「錯誤的問題」。你可以像上面提到的那樣創建一個你的結構體的數組,並將它索引爲一個數組,但我不認爲這很簡單,因爲每個struct元素都是一個數組的不同元素。如果你正在尋找一些結構,我的答案應該會有所幫助。如果你想讓你的結構的每個元素都是數組的一個元素,那麼40two的答案應該可以幫助你。
如果你的結構是POD,那麼你可以考慮使用std :: tuple而不是結構。然後,您可以使用各種模板工具來處理元組的成員。
下面是一個簡單的例子,它打印元組的元素 - 使用boost ::融合::元組代替的std ::元組,因爲它有許多可用的更多的元組操縱設施:
#include <boost/fusion/tuple.hpp>
#include <boost/fusion/include/for_each.hpp>
#include <iostream>
struct Printer {
template<typename T>
void operator()(const T &t) const {
std::cout << t << std::endl;
}
};
int main(int argc, const char * argv[])
{
boost::fusion::tuple<int, int, int, int, float> t =
boost::fusion::make_tuple(3, 5, 1, 9, 7.6f);
boost::fusion::for_each(t, Printer());
return 0;
}
你可以在結構中包含這些結構,但你想做一些測試以確保正確的對齊協議。
好處是這些操作速度非常快 - 大部分工作都是在編譯時完成的。不利的一面是你不能使用正常的控制結構,比如使用運行時索引建立索引 - 你必須建立一個抽象層,因爲正常的get<i>(tuple)
訪問器要求i
是一個編譯時間常量。這是否值得複雜取決於應用。
我將不得不研究它的實現並取回。 – 2014-09-18 20:49:07
你想對成員做什麼樣的事情? – sfjac 2014-09-18 20:54:25
只需遍歷它們並寫入一個文件即可。我想我可以在輸出時只輸出標題和數據,但我也想將多個結構的數據追加到文件中 - 可以動態存儲額外的「成員」。編輯:無聊的東西:想象一下游戲角色。 – 2014-09-18 21:35:35
爲什麼不在結構中保存一個數組? – juanchopanza 2014-09-18 20:23:24
'int bar [2]' - 不。 'int bar [3]' - 是的。 – 2014-09-18 20:25:02
@juanchopanza實際的實現承載了大量定義項目屬性的成員,並將其寫入文件。我害怕爲我的眼睛創造一堆無法讀取的數據。但我也希望能夠附加「特殊」屬性。 – 2014-09-18 20:28:47