c ++宏访问封闭类的名称

时间:2019-04-02 02:41:56

标签: c++ macros

为澄清起见,我正在尝试创建一个宏,该宏使获取成员函数的地址更容易一些,所以我希望输入当前类的成员函数名称(并且仅输入成员函数名称),以及该宏将使用变量的类型或封闭类的类型来实际访问该函数。 例如

#define GETMEMBERFUNCTIONPOINTER(identifier) /*magic code goes here*/

struct myStruct {
    void (myStruct::*functionPointer)();
    void myMemberFunc() {

    }
    myStruct() {
        functionPointer = GETMEMBERFUNCTIONPOINTER(myMemberFunc);
    }
};

这可能吗?我管理的最接近的方法是让每个类都继承一个可以在宏中使用的私有typedef。

1 个答案:

答案 0 :(得分:1)

免责声明:Macros are evil. Do not use macros.

话虽如此,我相信您正在寻找的魔术代码将会

public class Player : MonoBehaviour
{
    public float xMoveSpeed = 1f;
    private Rigidbody2D rbody;

    // Start is called before the first frame update
    void Start()
    {
        rbody = GetComponent<Rigidbody2D>();    
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown("d"))
        {
            rbody.position = rbody.position + new Vector2(xMoveSpeed, 0);
        }
    }
}

工作示例here

但是,我不认为任何人都应该这样做。如果您的设计要求经常使用成员函数指针,以至于您发现自己想要一个宏来为您做这件事,那么我强烈建议您在开始之前认真质疑您在做什么……