Boost爲浮點值提供了一個很好的多精度庫,但glm不允許將它與矢量或矩陣相乘或幾乎任何東西,因爲它不知道這是什麼。將glm :: vec3與boost多精度浮點數相乘
所以下面的代碼不會不編譯:
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <glm/glm.hpp>
int main()
{
typedef boost::multiprecision::cpp_dec_float_50 mp_float;
float a = 0.1f;
mp_float b = 0.1f;
glm::vec3 foo(1.f,1.f,1.f);
glm::vec3 v1 = a * foo; // OK
glm::vec3 v2 = b * foo; // COMPILER ERROR
}
有沒有一種方法,使這項工作,而不必去寫類包裝和操作符重載成員函數? (我真的很想避免這個)
或者,如果有人知道另一種乘法glm和高精度數字的方法,我將不勝感激。
謝謝
好的建議! 是的,我知道你可以做到這一點,但我試圖避免運營商超載作爲一個漏洞,因爲我將不得不重載幾乎所有的運營商和vec3的,vec4的,mat3的,mat4's ..等等!不是我想花我的時間做的事情!! :P 不幸的是,glm :: detail :: tvec3不能用於與另一個數字(int或float或mp_float)相乘。所以行:glm :: detail :: tvec3 v3 = a * foo;即使「foo」和「a」是mp_float類型也不會編譯。 –
更新:你甚至不能定義一種類型的glm :: detail :: tvec3 golf; –
啊,所以你不能。看起來你只限於使用平凡複製構造函數的類型。我從我的答案中編輯了那部分內容。 我能想到的另一件事是將重載定義爲模板,以便您不必爲每個向量/矩陣類型重新定義它們:'template T operator *(T v,mp_float f){return v * f.convert_to (); }' –
Mike