0

以下を使用して、Angelscript に Vec3 値型を登録しました。

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

その型のコンストラクタとデストラクタ関数も登録しました。

別のタイプ「Transform」を登録し、C++ クラス メソッド「const glm::vec3& GetTranslation()」に対応するメソッド「Vec3 GetTranslation()」を指定しました。

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

これは、Angelscript で 2 つを使用する方法です。

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]|
4

1 に答える 1

0

asMETHOD ではなく asMETHODPR を使用してコンパイル エラーを修正しました。

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

また、Vec3 ではなく Vec3& を返すように opAssign メソッドを変更する必要がありました。

また、GetTranslation() メソッドも Vec3& を返すように変更しました。

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

値がスクリプトにコピーされます。

于 2014-11-27T08:27:26.610 に答える