から除外しますfoo
には、foo
のバリデーションテンプレートに渡されるタイプのサブセットを持つbar
という関数を呼び出します。例:最初の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]
[EDIT]
私の目標は、イベントハンドラを一致させるために、このようなものを使用することができることです。例えば、ここで
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
が成功したかどうかをチェックし、最初に成功した機能を実行するオーバー関数の引数とマッチ繰り返し処理のためのパラメータパックを取得します。私はすでにこれらを実装しています。
ハンドラは、私は基本的にself
引数を取り除くためにしようとしています
[] (handler* self, <ARGS>) -> void {
// ...
}
のようなものです。
関連する質問:https://stackoverflow.com/questions/8569567/get-part-of-stdtuple – keith
おっと...私の悪い...私が実装しようとした – subzero