我有一个函数foo
,它调用函数bar
,并传入foo
的可变参数模板的子类型。例如:排除参数包中的前n个参数
template <typename... T>
void foo() {
// ...
template <size_t start_idx, typename... T>
using param_pack = /*Parameter pack with T[start_idx]...T[N]*/
auto b = bar<param_pack<2, T...>>();
// ...
}
有没有办法提取“子参数包”。在上述情况下,如果 然后T = [int float char double]
param_pack<2, T...> = [char double]
[编辑]
我的目标是能够使用这样的匹配的事件处理程序。例如
struct ev {};
template <typename... T>
struct event : ev {
std::tuple<T...> data_;
event(T&&... d) : data_(std::make_tuple(std::forward<T>(d)...)) {}
};
template <typename... Functor>
struct handler {
std::tuple<Functor...> funcs_;
handler(Functor&&... f) : funcs_(std::make_tuple(std::forward<Functor>(f)...)) {}
void handle_message(ev* e) {
auto ptrs = std::make_tuple(
dynamic_cast<event<param_pack<1, typename function_traits<F>::args>>*>(e)...
);
match(ptrs);
}
};
这里function_traits::args
得到的函数的参数和匹配迭代的元组funcs_
检查是否dynamic_cast
成功并执行第一次成功函数中的参数组。我已经有这些实施。
的处理程序是像
[] (handler* self, <ARGS>) -> void {
// ...
}
我基本上是试图摆脱self
说法。
一个相关的问题:https://stackoverflow.com/questions/8569567/get-part-of-stdtuple – keith
抱歉...我的坏...制作编辑现在 – subzero