我有一个参数包,里面装满了默认的可构造对象,然后是可调用对象(如ExampleFunctor
),并希望按顺序调用所有对象(从左到右)。如果返回类型是 void 以外的任何内容,我可以使用初始化列表来执行此操作:
struct ExampleFunctor{
void operator()(){someGlobal = 4;}
};
template<typename... Ts>
struct CallThem {
void operator()(){
auto list = {Ts()()...};
}
}
但是,如果返回类型为 void,则此技巧不起作用。
我可以将所有 T 包装在一个返回 int 的包装器中,但这似乎有点过头了,而且这段代码最终将在具有 32K 闪存的 cortex M3 上运行,因此如果我在调试中编译单元,包装器的额外函数调用开销会很痛苦模式(并且在发布模式下调试让我的大脑受伤)。
有没有更好的办法?