java可变返回类型_C -17可变参数模板:捕获回调参数的返回类型和参数类型

我花了好几个星期来解决这个难题,并认为我可能会把它作为对C变量模板人群的挑战 . 如果可以,我打赌你会告诉我如何在大约10秒内完成 .

假设我在C 17中有一个函数集合,每个函数都有自己的返回类型(或void),每个函数都有自己的参数类型 . 为简单起见,混合了POD参数和指向类的指针,可变数量的args等 . 所以有两个例子:

int somefunc(int x, double d) { return x + (int)d; }

void otherfunc(Foo *a, Bar *b, int x) { ... }

我的目标是通过构建一个在这里捕获完整类型集的可变参数函数来进行静态编译时反射,而无需注释 . 因此,为了讨论,我们可以说我们的函数是RT f(T1 a,T2 b,...)类型 . 我的上下文是我正在为RPC和多播系统构建一个新的(并且更好的)数据编组层,这些回调实际上将在接收到一个字节数组时完成,我需要对其进行解组并转换为正确的类型:从我的字节数组的第一个字节中提取的int,或者一个新的Foo(char *),其中Foo本身有一个工厂方法来执行提升等 .

静态反射是什么意思?我想要一个const std :: list,其中我可能会把类似idid(RT).hash_code()的东西放到我的Info类中,或者也许是指向我的每个参数类别的构造函数的指针(POD构造函数基本上会抛出传入的字节序列为int *,然后返回int;类构造函数将调用工厂方法) .

好的,长序言,现在失败的尝试:这是我的尝试 . C 17完全不喜欢它(似乎正确绑定RT但无法绑定Rest,可能因为Rest实际上是RT捕获的整个函数类型中的参数类型列表) . 有任何想法吗?

class Info

{

int rt, at; Info *next;

Info(int r, int a, Info* nxt) { rt = r; at = a; next = nxt; }

};

template

Info *Scan(RT cb())

{

return nullptr;

}

template Info* Scan(RT cb(T x, Rest... args))

{

return new Info(typeid(RT).hash_code(), typeid(T).hash_code(), Scan(cb(args...));

};

int TestMethod(int x, int y)

{

return 0;

}

int main()

{

Scan(TestMethod);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值