我有一個函數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