0

我正在尝试从 Irrlicht,dimension2df 注册以下函数:

template <class U>
dimension2d<T>& operator=(const dimension2d<U>& other)
{ 
    Width = (T) other.Width;
    Height = (T) other.Height;
    return *this;
}

这是完整的源文件:http: //irrlicht.sourceforge.net/docu/dimension2d_8h_source.html

这是我将重载的 operator= 注册到 angelscript 的 C++ 代码:

r = engine->RegisterObjectMethod("dimension2f", "bool opEquals(const dimension2f &in) const", asFUNCTIONPR(operator==, (dimension2df&), bool),asCALL_CDECL_OBJFIRST); assert(r >= 0);

编译后,我收到以下错误消息:

E:\pb\main.cpp|295|error: invalid static_cast from type '<unresolved overloaded function type>' to type 'bool (*)(irr::core::dimension2df&)'|

查看文档,它描述了这种注册操作员函数的方法:

struct Vector3
{
Vector3();
Vector3(const Vector3 &other);
Vector3(float x, float y, float z);

Vector3 &operator=(const Vector3 &other);
Vector3 &operator+=(const Vector3 &other);
Vector3 &operator-=(const Vector3 &other);
Vector3 &operator*=(float scalar);
Vector3 &operator/=(float scalar);

friend bool operator==(const Vector3 &a, const Vector3 &b);
friend bool operator!=(const Vector3 &a, const Vector3 &b);
friend Vector3 operator+(const Vector3 &a, const Vector3 &b);
friend Vector3 operator-(const Vector3 &a, const Vector3 &b);
friend Vector3 operator*(float s, const Vector3 &v);
friend Vector3 operator*(const Vector3 &v, float s);
friend Vector3 operator/(const Vector3 &v, float s);

float x;
float y;
float z;
};

r = engine->RegisterObjectMethod("vector3", "bool opEquals(const vector3 &in) const", asFUNCTIONPR(operator==, (const Vector3&, const Vector3&), bool), asCALL_CDECL_OBJFIRST); assert( r >= 0 );

我试图尽可能地遵循这个例子,但这个问题真的让我很难过。

4

1 回答 1

1

我已经弄清楚了,这是正确的代码:

r = engine->RegisterObjectMethod("dimension2f", "bool opEquals(const dimension2f &in) const", asMETHODPR(dimension2df, operator==, (const dimension2df&) const, bool),asCALL_THISCALL); assert(r >= 0);
于 2011-08-10T03:31:26.590 回答