問題
這東西是纏着我有一段時間了,但我無法找到它一個明確的答案:標準化2D/3D矢量/協調課程
- 是任何人都知道的向STL引入標準2D和/或3D向量(帶有x,y和z成員的結構)的建議?
- 如果沒有,是否有一種現實的方式讓這樣的課程進入下一個版本的標準 - 我自己寫一個完整的,完全寫出來的提案?
- 而且,有沒有什麼好的理由(除了沒有時間),爲什麼還沒有完成?
我絕對願意爲此做出貢獻,但我相信我缺乏足夠高質量的東西來獲得接受(我不是專業程序員)的經驗。
推理/背景
到現在爲止我已經看到了幾十個庫和框架(無論是圖形,物理,數學,導航,傳感器融合...)而這一切基本上實現自己的
struct Vector2d {
double x,y;
//...
};
/* ...
* operator overloads
*/
和/或其3D等價物 - 更不用說所有的場合,在我花時間做一個適當的,可重用的版本之前,我自己實現了一個。顯然,這並不困難,我並不擔心次優的實現,但每次,我想結合兩個庫或重用來自不同項目的代碼,我必須注意將一個版本轉換爲另一個版本(通過鑄造或 - 如果可能的話 - 文本替換)。
既然委員會努力大幅擴展C++ 17的標準庫(特別是2D圖形框架),我真的希望從一開始就有一個公共的2D矢量烘焙到所有接口中,這樣我就可以只寫如:
drawLine(transformCoordinates(trackedObject1.estimatePos(),params),
transformCoordinates(trackedObject2.estimatePos(),params));
而不是
MyOwnVec2D t1{trackedObject1.estimatePosX(), trackedObject1.estPosY()};
MyOwnVec2D t2{trackedObject2.estimatePosX(), trackedObject2.estPosY()};
t1 = transformCoordinates(t1,params);
t2 = transformCoordinates(t2,params);
drawLine(t1.x,t1.y,t2.x,t2.y);
的例子可能有點誇張,但我認爲這顯示了我的觀點。
我知道std::valarray
,它已經朝着正確的方向發展,因爲它允許像加法和乘法這樣的標準操作,但是如果你所需要的只是兩個或三個座標,它將承受太多的重量。我認爲具有固定大小和沒有動態內存分配(例如基於std::array
)的valarray將是一個可接受的解決方案,尤其是因爲它會帶來一個簡單的迭代器實現,但我個人更喜歡帶有x,y(和z )成員。
注:我很抱歉,如果這個話題已經討論過了(如果它沒有我會感到很驚訝),但每次我在尋找2D矢量我得到的結果在談論類似std::vector<std::vector<T>>
或者如何實現某種轉變,但對標準化的話題沒有任何規定。
*有沒有一種現實的方法可以讓這樣的課程進入下一個版本的標準 - 我自己寫一個完整的,完全寫作的提案還不夠?* - 說服其他人這樣做。這就是C++的發展方向。 –
@BartekBanachewicz:關於如何做到這一點或在哪裏尋求幫助來撰寫提案(如果您不是在一家軟件公司工作)的任何提示? – MikeMB
我從閱讀現有的建議開始。 –