如何优雅的写C++代码(简单函数反射实现一)

首先看一下实现后的C++函数反射如何使用:

1.首先定义一个类:

DECLARE_CLASS(testReflect_1) {
public:
    int sayhi(int v) {
        printf("sayhi!!!!!. \n");
        return v + 1;
    }
    
    String sayhello(int v,int j) {
        return String::New(v + j)->append(" is ok!!!");
    }

    DECLARE_REFLECT_METHOD(testReflect_1,sayhi,sayhello)
};

和之前申明成员变量反射类似的宏DECLARE_REFLECT_METHOD,testReflect_1是类目,后面可以添加需要反射的函数。应该算是比较简单的申明了。

然后我们看一下怎么使用:

Object t = (Object)testReflect_1::New();
    auto method = t->getMethodField("sayhi");
    auto result = method->execute(123);
    printf("result is %d \n",result->get<int>());

    auto method2 = t->getMethodField("sayhello");
    auto result2 = method2->execute(1,2);
    printf("result2 is %s \n",result2->get<String>()->toChars());

getMethodField函数根据函数名字来找到需要反射的函数

execute函数对应的就是执行被反射的函数。执行结果存放在如下结构体:

DECLARE_CLASS(MethodResult) {
public:
    template<typename T>
    _MethodResult(T v) {
        result = v;
    }

    template<typename T>
    T get() {
        return std::any_cast<T>(result);
    }

private:
    std::any result;    
};

模板中指定返回数据类型,get方法会强转。用起来还是比较方便的。

Obotcha链接:

https://github.com/wangsun1983/Obotcha/tree/master

反射实现:

https://github.com/wangsun1983/Obotcha/blob/master/lang/include/ReflectMethod.hpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值