該鍵將是一個字符串,並且該值將是任何類型的向量。是否可以創建一個向量圖,其中向量可以是任何類型的?
例如,第一個鍵可以映射到整數的矢量,第二個鍵可映射到浮點的矢量。在C++中可能嗎?
如果沒有,我可以通過其他方式達到類似的效果嗎?
該鍵將是一個字符串,並且該值將是任何類型的向量。是否可以創建一個向量圖,其中向量可以是任何類型的?
例如,第一個鍵可以映射到整數的矢量,第二個鍵可映射到浮點的矢量。在C++中可能嗎?
如果沒有,我可以通過其他方式達到類似的效果嗎?
任何類型?你可以考慮使用Boost.Any。然後你的類型是:
std::map<std::string, std::vector<boost::any> >
我認爲向量中的元素需要一致的類型。地圖中每個鍵的不同類型的矢量。 –
嗯,你可以這樣做:
std::map<std::string, std::vector<boost::any> >
但它是非常不可能的,這是你真正想要的東西。你爲什麼認爲你需要這個?
我有一個opengl渲染器,目前用java編寫,但被移植到C++。在這個渲染器中,我試圖隔離可以改變緩衝區和着色器的部分。所以我有一個registerBuffer和registerShader函數。 registerBuffer函數將着色器變量名稱(字符串)映射到緩衝區。但緩衝區可以是GLfloat或GLushort。所以現在我想能夠將着色器變量名映射到GLfloat或GLushort的矢量。
那麼,你可以使用std::map<std::string, boost::variant<GLfloat, GLushort>>
然後。
或者'map
@John:可能,但澤維爾特別詢問了一個映射到向量:) – fredoverflow
取決於哪一個更重要 - 值被類型限制爲向量,或者向量一旦找到它就受到類型的約束。 –
一個vector<T>
的值都必須是同一類型T
和一個map<K,V>
的值都必須V
類型,是vector<T>
一些T
的,所以,不,不開箱的,但你可以得到周圍的類型爲Boost.Any庫。
boost :: any解決方案似乎對我來說是一個黑客攻擊。我建議你看看你的渲染器的面向對象設計。
你需要的是一個具有字符串鍵和緩衝區作爲值的映射,正確嗎?然後編寫一個Buffer
類,它可以在內部保存任何類型的OpenGL緩衝區,並使每個實例都跟蹤它所保存的緩衝區的類型。這個類的數據存儲可以是一個通用的void*
,然後在需要將緩衝區發送到OpenGL時將其轉換爲正確的類型。
然後,你的數據結構問題尚未完全解決,你可以這樣做:
std::map<std::string, Buffer>
好運。
更迫切的問題是爲什麼你認爲你需要這個。 – delnan
基本上沒有。通過其他手段?絕對。爲什麼? –
它可以完成,但可能不應該。這是純粹的學術,還是你想做點什麼? – Beta