Зарегистрировать оператор присваивания для типа значений на основе glm :: vec3 в Angelscript

Я зарегистрировал тип значения Vec3 в Angelscript, используя:

RegisterObjectType("Vec3", sizeof(glm::vec3), asOBJ_VALUE | asGetTypeTraits<glm::vec3>());

Я также зарегистрировал функцию конструктора и деструктора для этого типа.

Я зарегистрировал другой тип, «Transform», и дал ему метод «Vec3 GetTranslation ()», который соответствует методу класса C ++ «const glm :: vec3».& GetTranslation ()»

RegisterObjectMethod("Transform", "Vec3 GetTranslation()", asMETHOD(Transform, GetTranslation), asCALL_THISCALL);

Вот как я использую два в Angelscript:

Vec3 v = transform.GetTranslation();

И я получаю эту ошибку:

No appropriate opAssign method found in 'Vec3' for value assignment

Как правильно зарегистрировать оператор присваивания или любой другой оператор?

Я попробовал это:

RegisterObjectMethod("Vec3", "Vec3 opAssign(const Vec3 &in)", asMETHOD(glm::vec3, operator=), asCALL_THISCALL);

И получил эту ошибку компиляции:

error: no matches converting function 'operator=' to type 'void (struct glm::detail::tvec3<float, (glm::precision)0u>::*)()'|
note: in expansion of macro 'asMETHOD'|
note: candidates are: template<class U> glm::detail::tvec3<T, P>& glm::detail::tvec3<T, P>::operator=(const glm::detail::tvec3<U, P>&) [with U = U; T = float; glm::precision P = (glm::precision)0u]
note:                 glm::detail::tvec3<T, P>& glm::detail::tvec3<T, P>::operator=(const glm::detail::tvec3<T, P>&) [with T = float; glm::precision P = (glm::precision)0u]|

0

Решение

Я исправил ошибку компиляции, используя asMETHODPR, а не asMETHOD:

RegisterObjectMethod("Vec3", "Vec3& opAssign(const Vec3 &in)", asMETHODPR(glm::vec3, operator=, (const glm::vec3&), glm::vec3&), asCALL_THISCALL);

Мне также нужно было изменить метод opAssign, чтобы вернуть Vec3&вместо Vec3.

И я изменил метод GetTranslation (), чтобы вернуть Vec3& также:

RegisterObjectMethod("Transform", "Vec3& GetTranslation()", asMETHOD(Transform, GetTranslation), asCALL_THISCALL);

Значения теперь копируются в сценарии.

0

Другие решения


По вопросам рекламы [email protected]