まじめな話ですが、Boostフェローの話なので悪口は控えます。このように物事を見るのは私の間違いに違いありませんが、理由が理解できないので、ここで質問します。多分誰かがこの問題で私を啓発することができます. ここに行きます:
uBLAS には、bounded_vector<>
固定サイズのベクトルを作成するために使用される、この優れたクラス テンプレートがあります (または、私はそう思いました)。
有効な uBLAS wiki から ( http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_UBLAS ):
デフォルトの uBLAS ベクトルおよび行列タイプは可変サイズです。多くの線形代数の問題には、固定サイズのベクトルが含まれます。2 要素と 3 要素は幾何学では一般的です! 固定サイズのストレージ (C 配列に類似) は、動的ストレージに関連するオーバーヘッド (ヒープ管理) を伴わないため、効率的に実装できます。uBLAS は、ベクトル/行列の基になるストレージをデフォルトの「unbounded_array」から「bounded_array」に変更することにより、固定サイズを実装します。
わかりました、このことは、ベクトルの基になるストレージを指定されたサイズの にbounded_vector<>
指定することから解放するために使用されます。bounded_array<>
ここで私はあなたに尋ねます: この有界ベクトルは固定サイズのように見えませんか? まあ、それはありません。
最初はwikiに裏切られた気がしましたが、「限界」の意味を再考し、それを通過できると思います. しかし、私のように(私はまだ確信が持てません)、これが理にかなっているのかどうかまだ疑問に思っている場合、私が見つけたのは、bounded_vector<>
実際にはサイズを変更できるということです。
- まず最初に、実際の >>固定<< サイズのベクトルまたは行列型を作らない正当な理由があったと思いますか?
- 固定サイズとは対照的に、この有界のベクトルを私のライブラリのユーザーに「固定サイズ」のベクトルの代替として「販売」しても問題ないと思いますか?効果的な uBLAS wiki はありましたか?
- この目的のために固定サイズのベクトルを何らかの方法で実装する必要があると思いますか? もしそうなら、どのように?(申し訳ありませんが、私は uBLAS に本当に慣れていないので、今日試してみました)
- 私は3Dゲームを開発しています。これに関連する計算に uBLAS を使用する必要がありますか ("hey, geometry!"、Effective uBLAS wiki による)。そうでない場合、どのような代替品を提案しますか?
- 編集
念のため、はい、次の警告を読みました。
これは、uBLAS が vector3 に使用するストレージのみを変更することに注意してください。uBLAS は、同じアルゴリズム (可変サイズを想定) を使用して vector3 を操作します。実際には、これは速度に悪影響を及ぼさないようです。上記は、uBLAS を使用しない手作りの vector3 と同じくらい速く実行されます。唯一のマイナスの影響は、vector3 が常に「サイズ」メンバーを格納することです。この場合は冗長です [またはそうではありませんか? つまり......]。
可変サイズを想定して同じアルゴリズムを使用していることがわかりますが、操作が実際にサイズを変更する場合は、停止する必要はありませんか (アサーション)。
ublas::bounded_vector<float,3> v3;
ublas::bounded_vector<float,2> v2;
v3 = v2;
std::cout << v3.size() << '\n'; // prints 2
おいおい、これはただの裏切りじゃないか?