2015-01-08 18 views
5

質問
これは、現在いくつかの時間のために私を盗聴だものですが、私はそれのために決定的な答えを見つけることができませんでした:標準化2D/3Dベクタ/コーディネートクラス

  • はを認識して誰です標準2Dおよび/または3Dベクトル(x、y、zメンバーを持つ構造体)をSTLに導入する提案ですか?
  • もしそうでなければ、そのようなクラスを次のバージョンの標準にする現実的な方法がありますか?
  • そして、これがまだ行われていない理由は何ですか?

私は確かに貢献したいと思いますが、私は受け入れられるほど十分に高い品質のものを作り出す経験がないと信じています(私はプロのプログラマーではありません)。私はすべての基本的

の独自のバージョンを実装するライブラリやフレームワークの数十(それは、グラフィックス、物理学、数学、ナビゲーション、センサー融合にあることを...)見てきた今では

推理/背景

struct Vector2d { 
    double x,y; 
    //... 
}; 
/* ... 
* operator overloads 
*/ 

および/またはその3D同等物 - すべての機会はもちろん、私が自分で実装した場所で、適切な再利用可能なバージョンを実行する時間がかかりました。
明らかに、これは難しいことではないし、次善の実装について心配しているわけではありませんが、たびに2つのライブラリを組み合わせたり、別のプロジェクトのコードを再利用したりする必要があります。キャストまたは可能であればテキスト置換)。

委員会は、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); 

を例は少し誇張されたかもしれないが、私はそれが私のポイントを示していると思います。

私はすでに正しい方向に進んでいることを認識しています。加算や乗算などの標準的な操作が可能ですが、必要なものが2つまたは3つの座標であれば、私は、固定サイズと動的メモリ割り当て(例えばstd::arrayに基づく)を持つvalarrayは、特にイテレータの実装が簡単であるため、許容できる解決策になると思いますが、私は個人的にはx、y(およびz )メンバー。

備考:このトピックは、すでに議論されている(と、それはしていない場合、私は驚くだろう)場合は申し訳ありませんが、私は2次元ベクトルを探してるたびに、私はstd::vector<std::vector<T>>ような何かについて話した結果を得ます特定の変換を実装する方法はありますが、標準化の話題は何もありません。

+0

*このようなクラスを次のバージョンの標準に組み込むための現実的な方法はありますか?完全かつ完全に書かれた提案を自分で書くのは簡単ではありませんか?それがC++の進化です。 –

+0

@BartekBanachewicz:これを行う方法に関するヒントや、(あなたがSW会社で働いていない場合は)提案を書くための助けを求める場所 – MikeMB

+1

私は既存の提案を読むことから始めます。 –

答えて

4

これはまだ行われていない理由は何ですか?

本質的に理由はありません。

2つまたは3つの要素を含む型を作成することはまったく自明ではなく、すべての操作を自明に定義することもできます。さらに、C++の標準ライブラリは、汎用の数学的ツールであることを意図したものではありません。特殊なサードパーティのライブラリを使用することは理にかなっています。 30分。

標準化する必要がないものは標準化していません。

C++が標準化された3DグラフィックスAPIを取得していた場合、私はこれが変わるのを見ることができますが、それまではありませんでした。そして、うまくいけばC++は標準化された3DグラフィックスAPIを得ることは決してありません。それはそうではないからです。

しかし、あなたが強く感じている場合は、std-discussionですべての専門家(そして確かに非専門家でもある)が住んでいるところで会話を始めることができます。時にはそのような会話が提案の形成につながり、必ずしもあなたがそれを書くことを終わらせる必要はありません。

+0

C++がある種の標準化された3DグラフィックスAPIを手に入れることができれば、確かに座標系を選択して動作するように一般化されます。 C++では、必要なものだけを支払うのが好きであり、すべてのAPI境界料金ブースで「税金」を支払うのではありません。 – sehe

+0

@sehe:多分私はあなたの意見を完全に見逃していますが、どうですか? 1つの実装では、プレーンなデータメンバ、別のセッタメソッドおよびゲッターメソッドが使用されます。座標x、y、zに名前をつけることができ、他のx1、x2、x3、および第3には配列スタイルのアクセスが必要な場合があります。 – MikeMB

+0

@MikeMB [** Boost Geometry ** Design Rationale](http://www.boost.org/doc/libs/1_57_0/libs/geometry/doc/html/geometry/design.html)を参照してください。 ** [Boost Propertiesymap](http://www.boost.org/doc/libs/1_57_0/libs/property_map/doc/property_map.html)**ライブラリ..アクセスの一般化は、汎用性の高いC++ APIの重要なツールですデザイン – sehe

1

他の人が興味を持っている場合は、"A Proposal to Add 2D Graphics Rendering and Display to C++"の7月の2014年7月のバージョンに2Dポイントクラス/構造体が含まれていることを指摘したいと思います(私の質問は2014年1月の初期ドラフトに基づいています)。 C++ 1zには単純な標準2D-Vectorがあるかもしれません。