次のような C++ コードがあります。
template <typename ...A>
struct CastAll{
template <typename ...B>
void cast_all(void(*fun)(B...), A...as){
//...
}
};
私がやりたいのは、引数のそれぞれを B のそれぞれの型に動的キャストし、「キャストされた」引数で指定された関数 fun を呼び出すような方法で cast_all を実装することです。
たとえば、次のようになります。
struct A{};
struct B : public A{};
void foo(B *b1, B *b2){
//... does something with b1 and b2
}
int main(){
A *a1 = new B();
A *a2 = new B();
CastAll<B*, B*> cast; //used to cast each A* to B*
cast.cast_all<B*, B*>(foo, a1, a2);
}
cast_all は次のように展開する必要があります: foo(dynamic_cast(a1), dynamic_cast(a2));
可変個引数テンプレートに関する多くの記事を見てきました。しかし、数時間後、私はまだそれを理解することができません.
何か案は?