假设我有一个结构体作为数据上下文,定义如下:
struct Ctx {
TypeA a;
TypeB b;
TypeC c;
TypeD d;
TypeE e;
};
auto TestFunc(TypeA a, TypeB b, TypeC c, args...) -> result;
并且呼叫将采取以下形式:
TestFunc(ctx.a, ctx.b, ctx.c, args...);
因为ctx是多余的,我想要一个新的 Package 器:
auto TestFunc(Ctx& ctx, args...) -> result {
return TestFunc(ctx.a, ctx.b, ctx.c, args...);
}
有没有什么方法可以将函数的类型签名Map到结构体的类型签名,这样我就可以创建某种宏/泛型组合,而不必为访问此Ctx中成员的每个函数手动编写 Package 器?
2条答案
按热度按时间lnlaulya1#
据我所知你需要两样东西
const
)函数将结构体转换为元组:然后,假设类型是不同的,一个函数(或2以支持C省略号)从元组中只过滤出您想要的参数:
Demo
vof42yt12#
我不完全确定你想达到什么目的。
但是变量
struct
可能会有帮助,你可以从初始化值中推导出结构体的成员,当然其他的推导也是可能的。我们可以在
std::tuple
上构建变量结构体,并且重载函数调用操作符,使用std::apply
调用变量为struct
的函数。例如,参见以下解决方案:
当然其他的实现也是可能的。如果你需要其他的东西,请评论。