我想使用指向类JQCollider的构造函数的指针作为参数。但是在构造对象时出现此错误。
在出现错误“非标准语法;使用'&'创建指向成员的指针”之前,我为每个指向成员参数的指针添加了'&'。但是在编译时,我现在得到了这个错误。
class JQCollider
{
public:
JQCollider()
{
}
JQCollider(FloatRect getBounds(), Vector2f getPos(),void setPos(Vector2f pos))
{
getObjPos = getPos;
getObjBounds = getBounds;
setObjPos = setPos;
}
private:
Vector2f(*getObjPos)();
FloatRect(*getObjBounds)();
void(*setObjPos)(Vector2f);
}
class JQTextBox
{
public:
JQTextBox()
{
}
void Initialize()
{
collision = JQCollider(&textBoxSprite.getGlobalBounds, &textBoxSprite.getPosition, &textBoxSprite.setPosition);
}
private:
JQCollider collision;
Sprite textBoxSprite;
}
答案 0 :(得分:0)
您不能创建指向特定实例的成员函数的函数指针。而是使用std::function和std::bind:
#include <functional>
class JQCollider
{
public:
JQCollider()
{}
JQCollider(std::function<FloatRect>()> getBounds, std::function<Vector2f>()> getPos,
std::function<void(Vector2f)> setPos)
{
getObjPos = getPos;
getObjBounds = getBounds;
setObjPos = setPos;
}
private:
std::function<Vector2f>()> getObjPos;
std::function<FloatRect>()> getObjBounds;
std::function<void(Vector2f)> setObjPos;
}
class JQTextBox
{
public:
JQTextBox()
{}
void Initialize()
{
collision = JQCollider(std::bind(&Sprite::getGlobalBounds, textBoxSprite),
std::bind(&Sprite::getPosition, textBoxSprite),
std::bind(&Sprite::setPosition, textBoxSprite, std::placeholders::_1));
}
private:
JQCollider collision;
Sprite textBoxSprite;
}