可変数の引数を持つ異なる関数があるとします。最初の引数は常に他の手段で得られたポインタです。他のすべての引数は、テンプレートパックの展開を使用して別のテンプレートで取得します。次のように私はこれらの関数を呼び出すために使用
テンプレートは次のとおりです。Argからのn個の引数の使用位置mからの開始
template<typename RT, typename... Args>
inline RT call(RT(*function)(Args...))
{
return function(pointer_from_somewhere, bind_argument<Args>::get_arg()...);
}
、それはすべての引数のテンプレートの拡張を行い、これは明らかにあまりにも多くの引数があることこれが、コンパイルされません。
私はいつも他の方法で最初の引数を取得しているので、2番目の引数から始めて、sizeof...(Args) - 1
引数のテンプレートパックの展開をどうすればできますか?
EDIT:テンプレートは、デモの目的のためにスリム化され
ますが、それは第一引数(ポインタ)は、最初の引数の型に常にreinterpret_cast'edされていることを、関連するかもしれません。私はstd::tuple_element<0, std::tuple<Args...>>::type
を使って第1引数の型を調べます。
'bind_argument'も同様に投稿してください。 –
デモンストレーションの目的で、実際の目的/問題を紹介するために例をスリム化しました。これは、高レベルのエミュレートされた関数を呼び出すエミュレータの目的であり、引数はスタックまたはレジスタから渡されます(bind_argumentはそれを行います)。 – tambre